Keshawn_lu's Blog

Leetcode 面试题64. 求1+2+…+n

字数统计: 231阅读时长: 1 min
2020/06/02 Share

题目简介:

1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

示例 1:

1
2
输入: n = 3
输出: 6

示例 2:

1
2
输入: n = 9
输出: 45

限制:

  • 1 <= n <= 10000

思路:

不能使用for,就想到用递归,但是需要判断递归结束的标志,也就是n —> n - 1 -> ... -> 0n到达0时需要退出递归。所以可以使用逻辑运算符&&短路性质

即对于 A && B 这个表达式,如果 A 表达式返回 False ,那么 A && B 已经确定为 False ,此时不会去执行表达式 B。

n && (n += sumNums(n - 1)),当n == 0时,便不会去执行后面的部分。所以就相当于停止了递归。

代码如下:

1
2
3
4
5
6
7
8
9
10
class Solution {
public:
int sumNums(int n) {

n && (n += sumNums(n - 1));

return n;

}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: