动态规划,算一下$需要的最少硬币是多少
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount + 1, 1000000);
dp[0] = 0;
for(int i = 1; i <= amount; i++)
{
for(auto x: coins)
{
if(i - x >= 0 && dp[i - x] != 1000000)
dp[i] = min(dp[i], dp[i - x] + 1);
}
}
if(dp[amount] == 1000000) return -1;
else return dp[amount];
}
};
第二次写题
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> aCoins(amount + 1, 10000);
aCoins[0] = 0;
sort(coins.begin(), coins.end());
for(int i = 1; i <= amount; i++)
{
for(int k = 0; k < coins.size(); k++)
{
if(i < coins[k]) break;
if(aCoins[i - coins[k]] == 10000) continue;
aCoins[i] = min(aCoins[i], aCoins[i - coins[k]] + 1);
}
}
return aCoins[amount] == 10000? -1:aCoins[amount];
}
};