求1+2+3+...+n 题目: 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 数据范围: 0n≤200进阶: 空间复杂度 O(1) ,时间复杂度 O (n) 示
求1+2+3+...+n
题目:
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
数据范围: 0<n≤200 进阶: 空间复杂度 O(1) ,时间复杂度O(n)
示例1:
输入:5
返回值:15
示例2:
输入:1
返回值:1
思路一:
根据我们刚学的内部类的方法进行求解,通过调用
n
次构造函数来计算和,从_i = 1
开始计算,每调用一次构造函数_i++
一次,一共调用n
次构造函数,也就计算出1+2+……+n。
代码一:使用内部类和静态成员变量的方法
#include <unistd.h>
class Solution {
public:
class Sum{
public:
Sum()
{
_sum += _i;
_i++;
}
};
int Sum_Solution(int n) {
Sum a[n];
return _sum;
}
private:
static int _i;
static int _sum;
};
int Solution::_i = 1;
int Solution::_sum = 0;
代码二:使用静态成员函数和静态成员变量
class Sum{
public:
//构造函数
Sum()
{
_sum += _i;
_i++;
}
//对静态成员变量初始化
static void Init()
{
_i = 1;
_sum = 0;
}
//获取成员变量的值
static int GetSum()
{
return _sum;
}
private:
static int _i;
static int _sum;
};
class Solution {
public:
int Sum_Solution(int n) {
Sum::Init();
//Sum a[n];//变长数组
Sum* p = new Sum[n];
return Sum::GetSum();
}
};
//静态成员变量的定义
int Sum::_i = 1;
int Sum::_sum = 0;
时间复杂度:O(1)
空间复杂度:O(N)