1. 程式人生 > >LeetCode322零錢兌換2018_1207_1624

LeetCode322零錢兌換2018_1207_1624

dp[i]代表要湊齊總數為i的錢所需要的最少硬幣數
dp[i]=min(dp[i]-coins[j])+1 for all j

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        int min=0x7fffffff;
        vector<int> dp(amount+1,0);
        dp[0]=0;
        dp[1]=1;
        for(int i=1;i<=amount;i++){
            for
(int j=0;j<coins.size();j++){ if(i-coins[j]>=0&&dp[i-coins[j]]<amount+1){ min=dp[i-coins[j]]; } } dp[i]=min+1; min=0x7fffffff; } return dp[amount]; } };

這裡面考慮到有面值為1的硬幣的情況
測試用例
在這裡插入圖片描述


不通過
dp[1]!=1,沒有面值為1的硬幣

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        int min=0x7fffffff;
        vector<int> dp(amount+1,amount+1);  //amount+1為不可能需要的次數,湊不出時作為判斷條件
        dp[0]=0;
       // dp[1]=1;
        for(int i=1;i<=amount;i++){
            for
(int j=0;j<coins.size();j++){ if(i-coins[j]>=0&&dp[i-coins[j]]<amount+1){ //如果i-coins[j]能夠湊出來 if(dp[i-coins[j]]<min) min=dp[i-coins[j]]; } } if(min!=0x7fffffff) dp[i]=min+1; //如果能夠湊出來 min=0x7fffffff; } return dp[amount]==amount+1?-1:dp[amount]; } };

在這裡插入圖片描述