题目:
思路:
一开始使用的是先用大的硬币,然后用小的硬币. 类似贪心. 但是有个问题就是他可能无法整除.但是如果用别的硬币那么就可以整除. 好吧.不会只能看答案了.
动态规划套路详解 - 零钱兑换 - 力扣(LeetCode)
讲得很详细.使用的是类似递归的思想.如果我要获得11块钱 然后硬币 有 1 ,2 ,5. 那么我需要的是
dp [11 - 5] + 1的硬币数. 然后 dp [6 - 5] + 1 的硬币数, 最后是 dp[1 - 1] + 1 的硬币数.
逐层获得硬币然后最后的结果如果有的那么返回.如果没有那就返回 -1 .
代码是:
//code
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount + 1, amount + 1);
dp[0] = 0;
for (int i = 0; i < dp.size(); i++) {
for (int coin : coins) {
if (i - coin < 0) continue;
dp[i] = min(dp[i], 1 + dp[i - coin]);
}
}
return (dp[amount] == amount + 1) ? -1 : dp[amount];
}
};