mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
279.完全平方数:修改动规五部曲中 i和j的错误使用 和 部分文字表述
This commit is contained in:
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
1. 确定dp数组(dp table)以及下标的含义
|
1. 确定dp数组(dp table)以及下标的含义
|
||||||
|
|
||||||
**dp[i]:和为i的完全平方数的最少数量为dp[i]**
|
**dp[j]:和为j的完全平方数的最少数量为dp[j]**
|
||||||
|
|
||||||
2. 确定递推公式
|
2. 确定递推公式
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ dp[0]表示 和为0的完全平方数的最小数量,那么dp[0]一定是0。
|
|||||||
|
|
||||||
非0下标的dp[j]应该是多少呢?
|
非0下标的dp[j]应该是多少呢?
|
||||||
|
|
||||||
从递归公式dp[j] = min(dp[j - i * i] + 1, dp[j]);中可以看出每次dp[j]都要选最小的,**所以非0下标的dp[i]一定要初始为最大值,这样dp[j]在递推的时候才不会被初始值覆盖**。
|
从递归公式dp[j] = min(dp[j - i * i] + 1, dp[j]);中可以看出每次dp[j]都要选最小的,**所以非0下标的dp[j]一定要初始为最大值,这样dp[j]在递推的时候才不会被初始值覆盖**。
|
||||||
|
|
||||||
4. 确定遍历顺序
|
4. 确定遍历顺序
|
||||||
|
|
||||||
@ -70,9 +70,9 @@ dp[0]表示 和为0的完全平方数的最小数量,那么dp[0]一定是0。
|
|||||||
|
|
||||||
在[动态规划:322. 零钱兑换](https://programmercarl.com/0322.零钱兑换.html)中我们就深入探讨了这个问题,本题也是一样的,是求最小数!
|
在[动态规划:322. 零钱兑换](https://programmercarl.com/0322.零钱兑换.html)中我们就深入探讨了这个问题,本题也是一样的,是求最小数!
|
||||||
|
|
||||||
**所以本题外层for遍历背包,里层for遍历物品,还是外层for遍历物品,内层for遍历背包,都是可以的!**
|
**所以本题外层for遍历背包,内层for遍历物品,还是外层for遍历物品,内层for遍历背包,都是可以的!**
|
||||||
|
|
||||||
我这里先给出外层遍历背包,里层遍历物品的代码:
|
我这里先给出外层遍历背包,内层遍历物品的代码:
|
||||||
|
|
||||||
```CPP
|
```CPP
|
||||||
vector<int> dp(n + 1, INT_MAX);
|
vector<int> dp(n + 1, INT_MAX);
|
||||||
|
Reference in New Issue
Block a user