文章目录
一、题目链接

二、思路
不使用任何循环语句(for/while等)
不使用条件判断语句(if/else/switch/三元运算符等)
不使用乘除法
为了规避这些限制,我们可以利用
静态成员变量在所有对象间共享
进行编写代码。
首先我们定义并初始化一个类,期间使用static int _i作为计数器,static int _ret 作为储存累加量的整形(同时充当返回值)。这样由于static在静态存储区上,而非普通变量对象所在内存(栈/堆)上。故此它们不会随对象创建销毁。
内存布局:
以n=3为例:
初始化静态成员:
_i = 0
_ret = 0
创建sum maysheeo[3]数组:
构造第1个对象:
_i = 0 + 1 = 1
_ret = 0 + 1 = 1
构造第2个对象:
_i = 1 + 1 = 2
_ret = 1 + 2 = 3
构造第3个对象:
_i = 2 + 1 = 3
_ret = 3 + 3 = 6
返回sum::ret(),即返回6
其间核心思路在于:
-
1.利用静态成员保持状态:
_i:静态成员变量,记录当前要累加的数字(初始化为0)
_ret:静态成员变量,记录累加的总和(初始化为0)
-
2.通过对象构造实现隐式循环:
创建n个sum类对象
每个对象构造时自动执行构造函数中的累加操作
n次构造 ⇒ n次累加 ⇒ 实现1到n的求和
三、代码全视图
cpp
class sum {
public:
sum() {
_i = _i + 1; // 先递增_i,让i变成1.
_ret = _ret + _i; // 然后将递增后的_i加到_ret
}
static int ret() {
return _ret;
}
private:
static int _i; // 当前数字
static int _ret; // 累加结果
};
// 静态成员初始化
int sum::_ret = 0;
int sum::_i = 0;
class Solution {
public:
int Sum_Solution(int n) {
sum maysheeo[n]; // 创建n个sum对象的数组。
//创建sum对象数组时,会调用n次构造函数。
return sum::ret(); // 返回累加结果
}
};