剑指 Offer 10-II 青蛙跳台阶问题
解题思路
从递归的角度考虑,由于青蛙一次可以跳 1 或 2 个台阶,青蛙在跳上第 n 阶台阶之前(n >= 2),可能处在两个位置上:
- 第 n - 1 阶台阶上
- 第 n - 2 阶台阶上
例如,假设 n = 4,则有图解如下:

因此设跳上第 n 阶台阶的方法有 f[n] 种,则有状态方程:
| f[n] = | |
|---|---|
| f[n - 1] + f[n - 2] | n > 2 |
| 2 | n == 2 |
| 1 | n == 1 |
代码
class Solution {
final int MOD = (int)1e9 + 7;
public int numWays(int n) {
switch(n) {
case 0:
return 1;
case 1:
return 1;
case 2:
return 2;
default:
break;
}
int[] counts = new int[n];
counts[0] = 1;
counts[1] = 2;
for (int i = 2; i < n; i ++) {
counts[i] = counts[i - 1] + counts[i - 2];
if (counts[i] > MOD) {
counts[i] %= MOD;
}
}
return counts[n - 1];
}
}
浙公网安备 33010602011771号