Skip to content

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

+25-23
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

+1-1
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

+1-1
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 (int i = 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

+4-6
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

+2-2
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

+32-29
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
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
};
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
}
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 (int i = 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

+4-7
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
};
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Solution:
22
def numWays(self, n: int) -> int:
3-
a, b = 0, 1
3+
a = b = 1
44
for _ in range(n):
5-
a, b = b, a + b
6-
return b % 1000000007
5+
a, b = b, (a + b) % 1000000007
6+
return a

0 commit comments

Comments
 (0)