难度:中等
求 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—力扣专栏,每日更新!