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 0ccff44

Browse files
committed
feat: add solutions to lcof problems: No.10.1,10.2
1 parent ced5740 commit 0ccff44

File tree

11 files changed

+83
-83
lines changed

11 files changed

+83
-83
lines changed

‎lcof/面试题10- I. 斐波那契数列/README.md‎

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ F(N) = F(N - 1) + F(N - 2), 其中 N > 1.</pre>
3838

3939
## 解法
4040

41-
递推求解。
41+
**方法一:递推**
42+
43+
我们定义初始项 $a=0,ドル $b=1,ドル接下来执行 $n$ 次循环,每次循环中,计算 $c=a+b,ドル并更新 $a=b,ドル $b=c,ドル循环 $n$ 次后,答案即为 $a$。
44+
45+
时间复杂度 $O(n),ドル空间复杂度 $O(1)$。其中 $n$ 为输入的整数。
4246

4347
<!-- tabs:start -->
4448

@@ -49,8 +53,8 @@ class Solution:
4953
def fib(self, n: int) -> int:
5054
a, b = 0, 1
5155
for _ in range(n):
52-
a, b = b, a + b
53-
return a%1000000007
56+
a, b = b, (a + b) %1000000007
57+
return a
5458
```
5559

5660
### **Java**
@@ -59,7 +63,7 @@ class Solution:
5963
class Solution {
6064
public int fib(int n) {
6165
int a = 0, b = 1;
62-
for (int i =0; i < n; ++i) {
66+
while (n-->0) {
6367
int c = (a + b) % 1000000007;
6468
a = b;
6569
b = c;
@@ -76,7 +80,7 @@ class Solution {
7680
public:
7781
int fib(int n) {
7882
int a = 0, b = 1;
79-
for (int i = 0; i < n; ++i) {
83+
while (n--) {
8084
int c = (a + b) % 1000000007;
8185
a = b;
8286
b = c;
@@ -86,6 +90,18 @@ public:
8690
};
8791
```
8892
93+
### **Go**
94+
95+
```go
96+
func fib(n int) int {
97+
a, b := 0, 1
98+
for i := 0; i < n; i++ {
99+
a, b = b, (a+b)%1000000007
100+
}
101+
return a
102+
}
103+
```
104+
89105
### **JavaScript**
90106

91107
```js
@@ -94,29 +110,15 @@ public:
94110
* @return {number}
95111
*/
96112
var fib = function (n) {
97-
let a = 0,
98-
b = 1;
99-
for (let i = 0; i < n; ++i) {
100-
const c = (a + b) % (1e9 + 7);
101-
a = b;
102-
b = c;
113+
let a = 0;
114+
let b = 1;
115+
while (n--) {
116+
[a, b] = [b, (a + b) % (1e9 + 7)];
103117
}
104118
return a;
105119
};
106120
```
107121

108-
### **Go**
109-
110-
```go
111-
func fib(n int) int {
112-
a, b := 0, 1
113-
for i := 0; i < n; i++ {
114-
a, b = b, (a+b)%1000000007
115-
}
116-
return a
117-
}
118-
```
119-
120122
### **TypeScript**
121123

122124
```ts

‎lcof/面试题10- I. 斐波那契数列/Solution.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ class Solution {
22
public:
33
int fib(int n) {
44
int a = 0, b = 1;
5-
for (int i = 0; i < n; ++i) {
5+
while (n--) {
66
int c = (a + b) % 1000000007;
77
a = b;
88
b = c;

‎lcof/面试题10- I. 斐波那契数列/Solution.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Solution {
22
public int fib(int n) {
33
int a = 0, b = 1;
4-
for (inti = 0; i < n; ++i) {
4+
while (n-- > 0) {
55
int c = (a + b) % 1000000007;
66
a = b;
77
b = c;

‎lcof/面试题10- I. 斐波那契数列/Solution.js‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
* @return {number}
44
*/
55
var fib = function (n) {
6-
let a = 0,
7-
b = 1;
8-
for (let i = 0; i < n; ++i) {
9-
const c = (a + b) % (1e9 + 7);
10-
a = b;
11-
b = c;
6+
let a = 0;
7+
let b = 1;
8+
while (n--) {
9+
[a, b] = [b, (a + b) % (1e9 + 7)];
1210
}
1311
return a;
1412
};

‎lcof/面试题10- I. 斐波那契数列/Solution.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ class Solution:
22
def fib(self, n: int) -> int:
33
a, b = 0, 1
44
for _ in range(n):
5-
a, b = b, a + b
6-
return a%1000000007
5+
a, b = b, (a + b) %1000000007
6+
return a

‎lcof/面试题10- II. 青蛙跳台阶问题/README.md‎

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,13 @@
3535

3636
## 解法
3737

38-
青蛙想上第 `n` 级台阶,可从第 `n-1` 级台阶跳一级上去,也可从第 `n-2` 级台阶跳两级上去,即:`f(n) = f(n-1) + f(n-2)`。递推求解即可。
38+
**方法一:递推**
39+
40+
青蛙想上第 $n$ 级台阶,可从第 $n-1$ 级台阶跳一级上去,也可从第 $n-2$ 级台阶跳两级上去,即 $f(n) = f(n-1) + f(n-2)$。这实际上可以转换为斐波那契数列的问题。
41+
42+
我们定义初始项 $a=1,ドル $b=1,ドル接下来执行 $n$ 次循环,每次循环中,计算 $c=a+b,ドル并更新 $a=b,ドル $b=c,ドル循环 $n$ 次后,答案即为 $a$。
43+
44+
时间复杂度 $O(n),ドル空间复杂度 $O(1)$。其中 $n$ 为输入的整数。
3945

4046
<!-- tabs:start -->
4147

@@ -44,24 +50,24 @@
4450
```python
4551
class Solution:
4652
def numWays(self, n: int) -> int:
47-
a, b =0, 1
53+
a=b = 1
4854
for _ in range(n):
49-
a, b = b, a + b
50-
return b %1000000007
55+
a, b = b, (a + b) %1000000007
56+
return a
5157
```
5258

5359
### **Java**
5460

5561
```java
5662
class Solution {
5763
public int numWays(int n) {
58-
int a = 0, b = 1;
59-
for (int i =0; i < n; ++i) {
64+
int a = 1, b = 1;
65+
while (n-->0) {
6066
int c = (a + b) % 1000000007;
6167
a = b;
6268
b = c;
6369
}
64-
return b;
70+
return a;
6571
}
6672
}
6773
```
@@ -72,17 +78,29 @@ class Solution {
7278
class Solution {
7379
public:
7480
int numWays(int n) {
75-
int a = 0, b = 1;
76-
for (int i = 0; i < n; ++i) {
81+
int a = 1, b = 1;
82+
while (n--) {
7783
int c = (a + b) % 1000000007;
7884
a = b;
7985
b = c;
8086
}
81-
return b;
87+
return a;
8288
}
8389
};
8490
```
8591
92+
### **Go**
93+
94+
```go
95+
func numWays(n int) int {
96+
a, b := 1, 1
97+
for i := 0; i < n; i++ {
98+
a, b = b, (a+b)%1000000007
99+
}
100+
return a
101+
}
102+
```
103+
86104
### **JavaScript**
87105

88106
```js
@@ -91,29 +109,14 @@ public:
91109
* @return {number}
92110
*/
93111
var numWays = function (n) {
94-
let a = 0,
95-
b = 1;
96-
for (let i = 0; i < n; ++i) {
97-
const c = (a + b) % (1e9 + 7);
98-
a = b;
99-
b = c;
112+
let a = (b = 1);
113+
while (n--) {
114+
[a, b] = [b, (a + b) % (1e9 + 7)];
100115
}
101-
return b;
116+
return a;
102117
};
103118
```
104119

105-
### **Go**
106-
107-
```go
108-
func numWays(n int) int {
109-
a, b := 0, 1
110-
for i := 0; i < n; i++ {
111-
a, b = b, (a + b) % 1000000007
112-
}
113-
return b
114-
}
115-
```
116-
117120
### **TypeScript**
118121

119122
```ts
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
class Solution {
22
public:
33
int numWays(int n) {
4-
int a = 0, b = 1;
5-
for (int i = 0; i < n; ++i) {
4+
int a = 1, b = 1;
5+
while (n--) {
66
int c = (a + b) % 1000000007;
77
a = b;
88
b = c;
99
}
10-
return b;
10+
return a;
1111
}
1212
};
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
func numWays(n int) int {
2-
a, b := 0, 1
3-
for i := 0; i < n; i++ {
4-
a, b = b, (a+b) %1000000007
5-
}
6-
return b
2+
a, b := 1, 1
3+
for i := 0; i < n; i++ {
4+
a, b = b, (a+b)%1000000007
5+
}
6+
return a
77
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
class Solution {
22
public int numWays(int n) {
3-
int a = 0, b = 1;
4-
for (inti = 0; i < n; ++i) {
3+
int a = 1, b = 1;
4+
while (n-- > 0) {
55
int c = (a + b) % 1000000007;
66
a = b;
77
b = c;
88
}
9-
return b;
9+
return a;
1010
}
1111
}

‎lcof/面试题10- II. 青蛙跳台阶问题/Solution.js‎

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,9 @@
33
* @return {number}
44
*/
55
var numWays = function (n) {
6-
let a = 0,
7-
b = 1;
8-
for (let i = 0; i < n; ++i) {
9-
const c = (a + b) % (1e9 + 7);
10-
a = b;
11-
b = c;
6+
let a = (b = 1);
7+
while (n--) {
8+
[a, b] = [b, (a + b) % (1e9 + 7)];
129
}
13-
return b;
10+
return a;
1411
};

0 commit comments

Comments
(0)

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