题目要求
求 1 + 2 + . . . + n 1+2+...+n 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
思路1
1 + 2 + . . . + n = n ( n + 1 ) / 2 1+2+...+n=n(n+1)/2 1+2+...+n=n(n+1)/2
- 由于不可以使用乘除法,可以考虑用sizeof运算符计算 n ( n + 1 ) n(n+1) n(n+1)和使用移位运算符>>表示除以2
class Solution {
public:
int getSum(int n) {
char a[n][n+1];
return sizeof(a)>>1;
}
};
思路2
- 核心代码:
n>0 && (ans+=sumNums(n-1));
- 当
n
<
=
0
n<=0
n<=0的时候
ans+=sumNums(n-1)
语句将不被执行,因此ans为1+…+n的值
class Solution {
public:
int sumNums(int n) {
int ans=n;
n>0 && (ans+=sumNums(n-1));
return ans;
}
};