思路
- 对于动态规划类问题最重要的是找出状态转移公式
- 这道题 要上到某一个台阶的代价假设为dp[i] 那么有 dp[i] = max{dp[i-1],dp[i-2] + cost[i])},对于边界情况,dp[0]=cost[0],dp[1]=cost[1] (最开始可以选择第0个或者第1个作为起始台阶,所以要上到第0个或者第1个台阶只需要支付他们自己的费用即可)
- 注意如何节省空间
class Solution {
public int minCostClimbingStairs(int[] cost) {
int[] dp = new int[]{cost[0], cost[1]};
for (int i = 2; i < cost.length; i++)
dp[i % 2] = Math.min(dp[0], dp[1]) + cost[i];
return Math.min(dp[0], dp[1]);
}
}