难度:中等
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及 条件判断语句(A?B:C)。
输入: n = 3
输出: 6
输入: n = 9
输出: 45
限制:
1 <= n <= 10000使用递归解法最重要的是指定返回条件,但是本题无法直接使用
if语句来指定返回条件。
条件与 && 具有短路原则,即在第一个条件语句为 false 的情况下不会去执行第二个条件语句。
取非 然后作为 && 的 第一个条件语句,递归的主体转换为 第二个条件语句;true 的情况下就不会执行递归的主体部分,递归返回。
n <= 0,取非后就是 n > 0;sum += Sum_Solution(n - 1),转换为条件语句后就是 (sum += Sum_Solution(n - 1)) > 0。注意:Java 中,为构成语句,需加一个辅助布尔量
xxx,否则会报错;
C++
class Solution {
public:
int sumNums(int n) {
n && (n += sumNums(n - 1));
return n;
}
};
Java
class Solution {
public int sumNums(int n) {
boolean flag = (n > 0) && ((n += sumNums(n - 1)) > 0);
return n;
}
}

n 次,每次递归中计算时间复杂度为
O
(
1
)
O(1)
O(1),因此总时间复杂度为
O
(
n
)
O(n)
O(n)。题目来源:力扣。
放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!