-
前言
状态:动态规划之前没有接触过,基本都不会。看了前面两题 746 按照解题方法 AC 了。 -
更新
1 | 24-06-18 初始记录 |
初步题解
509 斐波那契数
题目链接:(https://leetcode.cn/problems/fibonacci-number)
1 | // 递归做法 |
70 爬楼梯
题目链接:(https://leetcode.cn/problems/climbing-stairs/)
不会。
746 使用最小花费爬楼梯
题目链接:(https://leetcode.cn/problems/min-cost-climbing-stairs/)
-
确定
dp[i]
的含义:爬到 i 台阶需要的最小花费 -
递推公式:
Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
-
dp 数组的初始化
dp[0] = 0
、dp[1] = 1
-
遍历顺序:从前向后遍历。
-
打印 dp 数组(用于 debug)
1 | public static void main(String[] args) { |
看解析
509 斐波那契数
题解:(https://programmercarl.com/0509.斐波那契数.html)
-
确定
dp[i]
的含义:第 i 个斐波那契数 -
递推公式:
dp[i] = dp[i - 1] + dp[i - 2]
-
dp 数组的初始化
dp[0] = 1
、dp[1] = 1
-
遍历顺序:从前向后遍历。
-
打印 dp 数组(用于 debug)
1 | public static int fibBp(int n) { |
70 爬楼梯
解析:(https://programmercarl.com/0070.爬楼梯.html)
-
确定
dp[i]
的含义:爬 i 阶有几种方法 -
递推公式:
dp[i] = dp[i - 1] + dp[i - 2]
这里有点难理解:因为走到 i 阶只有两种情况,1️⃣从 i - 2 到 i 走两步;2️⃣从 i - 1 到 i 走两步。所以到 i 阶的总方法数 :dp[i] = dp[i - 1] + dp[i - 2]
-
dp 数组的初始化
dp[1] = 1
、dp[2] = 2
。根据题目描述,n > 0 所以这里这么设置。 -
遍历顺序:从前向后遍历。
-
打印 dp 数组(用于 debug)
1 | public int climbStairs(int n) { |