35
35
36
36
## 解法
37
37
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$ 为输入的整数。
39
45
40
46
<!-- tabs:start -->
41
47
44
50
``` python
45
51
class Solution :
46
52
def numWays (self , n : int ) -> int :
47
- a, b = 0 , 1
53
+ a= b = 1
48
54
for _ in range (n):
49
- a, b = b, a + b
50
- return b % 1000000007
55
+ a, b = b, ( a + b) % 1000000007
56
+ return a
51
57
```
52
58
53
59
### ** Java**
54
60
55
61
``` java
56
62
class Solution {
57
63
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 ) {
60
66
int c = (a + b) % 1000000007 ;
61
67
a = b;
62
68
b = c;
63
69
}
64
- return b ;
70
+ return a ;
65
71
}
66
72
}
67
73
```
@@ -72,17 +78,29 @@ class Solution {
72
78
class Solution {
73
79
public:
74
80
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-- ) {
77
83
int c = (a + b) % 1000000007;
78
84
a = b;
79
85
b = c;
80
86
}
81
- return b ;
87
+ return a ;
82
88
}
83
89
};
84
90
```
85
91
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
+
86
104
### ** JavaScript**
87
105
88
106
``` js
@@ -91,29 +109,14 @@ public:
91
109
* @return {number}
92
110
*/
93
111
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 )];
100
115
}
101
- return b ;
116
+ return a ;
102
117
};
103
118
```
104
119
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
-
117
120
### ** TypeScript**
118
121
119
122
``` ts
0 commit comments