We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 28e42c2 commit 161a9adCopy full SHA for 161a9ad
leetcode刷题/note/6月刷题/02.md
@@ -0,0 +1,50 @@
1
+# 面试题 64. 求 1+2+…+n
2
+
3
+难度 `middle`
4
5
+求 `1+2+...+n` ,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句(A?B:C)。
6
7
+## 示例
8
9
+```
10
+输入: n = 3
11
+输出: 6
12
+-------
13
+输入: n = 9
14
+输出: 45
15
16
17
+## 解题思路
18
19
+如果忽略题目限制。
20
21
+高中学过等差数列的求和公式 S = (1+n)* n / 2;
22
23
+可以很快的写出代码:
24
25
+```javascript
26
+var sum = function(n) {
27
+ return (1+n)*n/2;
28
+}
29
30
31
+题目也不让用循环,考虑使用递归,也是一行代码。
32
33
34
+var sumNums = function(n) {
35
+ return n == 0 ? 0 : n + sumNums(n-1);
36
+};
37
38
39
+但是题目限制了不让使用三目运算符,可以考虑使用 「与」 `&&` 操作。「与」操作有个就近原则,例如 A && B,如果 A 为 false,那么整个表达式就位 false,如果 A 为 true,则再看 B 的真值。
40
41
+因此,可以将上面的递归代码改写成下面这个样子:
42
43
44
45
+ n && (n += sumNums(n-1));
46
+ return n;
47
48
49
50
+完事,这题考察递归以及逻辑运算,以后遇到类似的限制题目,可以往这方面想。
0 commit comments