# 题目描述
求 1 + 2 + ... + n
, 要求 不能使用 乘除法
, for
, while
, if
, else
, switch
, case
等关键字及条件判断语句 (A ? B : C)
。
示例 1:
输入: n = 3
输出: 6
1
2
2
示例 2:
输入: n = 9
输出: 45
1
2
2
限制:
1 <= n <= 10000
1
来源: 力扣 (LeetCode) (opens new window)
# 解题思路 or 实现原理
我们小学就学过 1 + 2 + ... + n
的结果就是 $ sum = \frac{(1 + n) * n}{2} $, 但是由于题目限定, 我们不能使用常规方法, 所以我们可以通过 短路递归 和 幂运算移位 来计算出结果。
# 实现代码
/*
* @Author: Rainy
* @Date: 2019-11-14 19:25:01
* @LastEditors: Rainy
* @LastEditTime: 2020-07-28 15:42:46
*/
/**
* @param {number} n
* @return {number}
*/
export function sumNums_1(n: number): number {
return n && (n + sumNums_1(--n));
};
export function sumNums_2(n: number): number {
// (n + 1) * n / 2 => (n ^ 2 + n) / 2
return (n ** 2 + n) >> 1;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20