求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
解法思路
解法1:利用短路运算符&&代替if语句终止递归
class Solution {
int res;
public int sumNums(int n) {
boolean x = n>1 && sumNums(n-1)>0;
res+=n;
return res;
}
}
当n=1时,sumNums终止递推,开始回溯,逐次开始+1,+2....+n,返回res。
解法2:利用c++ sizeof函数 生成表达式n*(n+1)/2(来自评论区大佬)
class Solution {
public:
int sumNums(int n) {
bool arr[n][n+1];
return sizeof(arr)>>1;
}
};
题目来源
作者:Krahets
链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm/9h44cj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。