70. Climbing Stairs

DP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public int climbStairs(int n) {
// 定义 dp[i] 为爬至 i 台阶的方法数
int[] dp = new int[n + 1];
dp[0] = 1; // 注意爬至台阶 0 的方法数为 1 种
dp[1] = 1;

for (int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}

return dp[n];
}
}

DP

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int climbStairs(int n) {
int a = 1, b = 1;

for (int i = 2; i <= n; i++) {
int c = a + b;
a = b;
b = c;
}

return b;
}
}

References

70. Climbing Stairs
剑指 Offer 10- II. 青蛙跳台阶问题