題意:給出硬幣的種類和要換的錢,最少可以用多少個硬幣去換,不能返回-1。
題解:dp,類似揹包的dp,dp[i]表示換成i元的時候最少要多少個硬幣。
dp[v] = min(dp[v],dp[v -coins[i]] + 1);
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
int n = coins.size();
int dp[amount + 1];
memset(dp,0x3f,sizeof(dp));
dp[0] = 0;
for(int i = 0; i < n; i++)
for(int v = coins[i]; v <= amount; v++)
dp[v] = min(dp[v - coins[i]] + 1,dp[v]);
if(dp[amount] != 0x3f3f3f3f) return dp[amount];
else return -1;
}
};