求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
数据范围: 0<n≤2000<n≤200
进阶: 空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)示例1
输入:
5返回值:15
解法一:递归
class Solution { public: int res = 0; int Sum_Solution(int n) { bool x = n>1 && Sum_Solution(n-1); res += n; return res; } };
解法二:数学公式(不符合题解)
return (1+n)*n/2;
解法三:采用类实例化时调用的构造函数
class Sum { public: Sum() { ++_n; _sum += _n; } static int GetSum() { return _sum; } private: static int _n; static int _sum;// 采用了静态成员变量共享访问,充作计数器作用 }; int Sum::_n = 0; //静态成员变量类内声明,类外定义 int Sum::_sum = 0; class Solution { public: int Sum_Solution(int n) { Sum S[n]; // 创建n个Sum类型的数组 目的是为了调用n次Sum类型的数组 // 仅适合此处OJ方式,编译器可以采用vector 和 new return Sum::GetSum(); // 静态成员函数可以使用 类名:: 的方式访问 } };