class Solution { public: /* int search(int idx, int amount, vector<int>& coins, vector<vector<int>> &fn) { if(idx>=coins.size()) return 1000000; if(amount< 0) return 1000000; if(amount == 0) return 0; if(fn[idx][amount] > 0 ) return fn[idx][amount]; int a = search(idx, amount-coins[idx], coins, fn) + 1; int b = search(idx+1, amount, coins, fn); fn[idx][amount] = min(a,b); return fn[idx][amount]; } int coinChange(vector<int>& coins, int amount) { int m = coins.size(); int n = amount; if(m <= 0 || n <=0) return 0; vector<vector<int>> fn(m, vector<int>(n+1, -1)); int ret = search(0, amount, coins, fn); if(ret >= 1000000) return -1; else return ret; } */ 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]] != -1) { if(dp[i] == -1 || dp[i] > dp[i-coins[j]] + 1) dp[i] = dp[i-coins[j]] + 1; } } } return dp[amount]; } };
Leetcode 322. 零钱兑换
猜你喜欢
转载自www.cnblogs.com/randyniu/p/9358148.html
今日推荐
周排行