心得
题解
- 进阶爬楼梯,改成每次可以爬1-m阶,完全背包问题,遍历顺序重要
class Solution {
public:
int climbStairs(int n) {
vector<int> dp(n + 1, 0)
dp[0] = 1
int m = 2
for (int i = 1
for (int j = 1
if (i - j >= 0) dp[i] += dp[i - j]
}
}
return dp[n]
}
}
心得
题解
- 由于求得是最小,初始值赋最大,考虑当前取到coin[i]时情况
- 遍历顺序题中为明确表示,无影响
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount + 1, INT_MAX)
dp[0] = 0
for (int i = 0
for (int j = coins[i]
if (dp[j - coins[i]] != INT_MAX) { // 跳过初值,也可以i = 1可以不同该行
dp[j] = min(dp[j], dp[j - coins[i]] + 1)
}
}
}
if (dp[amount] == INT_MAX) return -1
return dp[amount]
}
}
心得
题解
- 转换题意,完全平方数即为物品,背包容量即为n,
- 遍历顺序无影响,跟零钱那一题基本一致
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n + 1, INT_MAX)
dp[0] = 0
for (int i = 1
for (int j = i * i
dp[j] = min(dp[j], dp[j - i * i] + 1)
}
}
return dp[n]
}
}