leetcode 学习计划 动态规划第二天
1.爬楼梯
到第n层,有两种情况,一种为到第n层走了一个台阶,一种是走了两个台阶,所以此题动态转移方程为
f(n)=f(n-1)+f(n-2),n>2
f(1)=1;
f(2)=2;
代码如下
public int climbStairs(int n) {
if(n<=2){
return n;
}
int a=1;
int b=2;
for(int i=3;i<n;i++){
b=a+b;
a=b-a;
}
return a+b;
}
2.使用最小花费爬楼梯
此题和上题的区别在于本题到了每层台阶会有花费,所以只需要用个数组记录下到达每个台阶的所需要的最小花费。由题意可知n层的最小花费为到达第n-1层的最小花费加上第n-1的花费 和 到达第n-2层的最小花费加上第n-2的花费
代码如下
public int minCostClimbingStairs(int[] cost) {
int[] dp=new int[cost.length+1];
for(int i=2;i<=cost.length;i++){
dp[i]=Math.min(cost[i-1]+dp[i-1],cost[i-2]+dp[i-2]);
}
return dp[cost.length];
}