题意:给出硬币的种类和要换的钱,最少可以用多少个硬币去换,不能返回-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;
}
};