Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 161a9ad

Browse files
committed
add 02
1 parent 28e42c2 commit 161a9ad

File tree

1 file changed

+50
-0
lines changed
  • leetcode刷题/note/6月刷题

1 file changed

+50
-0
lines changed

leetcode刷题/note/6月刷题/02.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
```javascript
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+
```javascript
44+
var sumNums = function(n) {
45+
n && (n += sumNums(n-1));
46+
return n;
47+
}
48+
```
49+
50+
完事,这题考察递归以及逻辑运算,以后遇到类似的限制题目,可以往这方面想。

0 commit comments

Comments
 (0)