Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /