(M)Dynamic Programming:322. Coin Change
2017-10-09 13:23
190 查看
这道题不难,设一个dp数组,长度是ammount+1,初始化为-1。其中dp[i]表示钱数为i时的最小硬币数的找零,coins[j]为第j个硬币,而i - coins[j]为钱数i减去其中一个硬币的值,剩余的钱数在dp数组中找到值,然后加1和当前dp数组中的值做比较,取较小的那个更新dp数组。
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount + 1, -1);
dp[0] = 0;
for(int i = 1; i <= amount; ++i)
{
for(int j = 0; j < coins.size(); ++j)
{
if(i - coins[j] >= 0 && dp[i - coins[j]] >= 0)
dp[i] = (dp[i] == -1)? dp[i - coins[j]]+1 : min(dp[i], dp[i - coins[j]] + 1); //注意判断dp[i] == -1
}
}
return dp[amount];
}
};另一种写法,不在一开始的时候初始化为-1,而是在最后判断是输出dp[i]还是-1:
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
int Max = amount + 1;
vector<int> dp(amount + 1, Max);
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
for (int j = 0; j < coins.size(); j++) {
if (coins[j] <= i) {
dp[i] = min(dp[i], dp[i - coins[j]] + 1);
}
}
}
return dp[amount] > amount ? -1 : dp[amount];
}
};
相关文章推荐
- 动态规划——322. Coin Change
- leetcode 322. Coin Change
- Leetcode 322. Coin Change
- leecode 解题总结:322. Coin Change
- 322. Coin Change
- leetcode 322. Coin Change
- 322. Coin Change
- 322. Coin Change
- LeetCode 322. Coin Change
- Leetcode 322. Coin Change
- 322. Coin Change
- leetcode 322. Coin Change
- LeetCode322. Coin Change
- 【LeetCode】322. Coin Change
- 动态规划解322. Coin Change
- Leetcode 322. Coin Change
- [leetcode] 322. Coin Change 解题报告
- 322. Coin Change
- 322. Coin Change
- [Leetcode] 322. Coin Change 解题报告