問題の説明:
整数配列のコストを与えます。ここで、cost[i] は、階段の i 番目のステップを上るコストです。この料金を支払うと、1 つまたは 2 つの階段を登ることができます。
インデックス 0 またはインデックス 1 のステップから階段を登り始めるかを選択できます。
階段の一番上に到達するまでの最小コストを計算して返してください。
質問リンク: LeetCode-746 - 最小限のコストで階段を登る
問題解決のアイデア: メモに詳細な説明が記載されています。
コード:
class Solution {
public int minCostClimbingStairs(int[] cost) {
// 1. 确定 dp[i] 的含义: dp[i]表示爬到第 i 个位置的最小花费
// 2. 递推公式:dp[i]=Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
// dp[i-1]:再加上向上跳 1步的花费 cost[i-1]
// dp[i-2]:再加向上上跳 2步的花费 cost[i-2]
// 3. 如何初始化:dp[0]=0; dp[1]=0,因为不需要花费体力,开始爬才会产生花费
// 4. 遍历的方向:从前向后遍历
if (cost.length==2){
return Math.min(cost[0], cost[1]);
}
int[] dp = new int[cost.length+1];
dp[0]=0;
dp[1]=0;
for (int i = 2; i < dp.length ; i++) {
dp[i]=Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);
}
return dp[dp.length-1];
}
}