“提高学习能力最重要的方法之一就是分享解题思路”。
爬楼梯,需要n阶可以到达顶楼。每次可以爬1或2个台阶,有多少种不同的方法可以爬到楼顶。
做动态规划我们需要画图,动态规划就是记忆性搜索,本身就是靠的个记录!
如果符合
x级台阶 爬1级 爬2级
1 1 0
2 1 1
3 2 1
4 3 2
写代码时,需要注意动态规划代码的核心框架是对dp数组的赋值逻辑。
代码如下:
class Solution {
public int climbStairs(int n) {
if(n == 1){
return 1;
}
int[][] dp = new int[n][2];
dp[0][0] = 1;
dp[0][1] = 0;
dp[1][0] = 1;
dp[1][1] = 1;
for(int i = 2; i < n; i++){
dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
dp[i][1] = dp[i - 2][0] + dp[i - 2][1];
}
return dp[n - 1][0] + dp[n - 1][1];
}
}