leetcode-剑指 Offer 64. 求1+2+…+n
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
解题思路:
方法一:
根据求和公式:(1+n)n/2=(nn+n)/2=(pow(n,2)+n)>>1;
class Solution {
public:
int sumNums(int n) {
return (pow(n,2)+n)>>1;
}
};
方法二:由于不能使用while,可以考虑递归
class Solution {
public:
int sumNums(int n) {
return n==0?0:n+sumNums(n-1);
}
};
但是题目中也不允许使用条件判断语句
考虑将n== 0替换为&&逻辑运算
由于a&&b : 如果 a= =0 那么直接false,不需要考虑b,也就是说递归直接进入到出口;
如果a==true,继续考虑b
class Solution {
public:
int sumNums(int n) {
n && (n+=sumNums(n-1));
return n;
}
};