動態規劃:1.動態規劃中每一個狀態一定是由上一個狀態推匯出來的 2.確定dp陣列(dp table)以及下標的含義,確定遞推公式dp,陣列如何初始化,確定遍歷順序,舉例推導dp陣列;3.Debug:dp陣列列印
509. 斐波那契數
題目連結:509. 斐波那契數
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰斐波那契數
日期:2024-10-07
想法:初識5步曲。
Java程式碼如下:
class Solution {
public int fib(int n) {
if (n <= 1) return n;
int[] dp = new int[n + 1];
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i++){
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}
70. 爬樓梯
題目連結:70. 爬樓梯
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰爬樓梯
日期:2024-10-07
想法:第i層,等於i-1的方法 + i-2的方法,dp[1] = 1; dp[2] = 2
Java程式碼如下:
class Solution {
public int climbStairs(int n) {
if (n <= 1) return n;
int[] dp = new int[n + 1];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++){
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}
746. 使用最小花費爬樓梯
題目連結:746. 使用最小花費爬樓梯
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰使用最小花費爬樓梯
日期:2024-10-07
Java程式碼如下:
class Solution {
public int minCostClimbingStairs(int[] cost) {
int[] dp = new int[cost.length + 1];
dp[0] = 0;
dp[1] = 0;
for (int i = 2; i <= cost.length; i++){
dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
}
return dp[cost.length];
}
}