void countarry(int *numarry, int amount, const int *coins, int coinssize)
numarry[0] = 0;
// for (int i = 0; i < coinssize; i++)
}int min(const int num1, const int num2)
else
}int coinchange(int* coins, int coinssize, int amount)}}
int ret = numarry[amount];
if (numarry[amount] > amount)
free(numarry);
return ret;
}
犯錯點總結:1、注釋處沒有考慮到[1] 0的情況,導致numarry在malloc的時候只有乙個元素,而注釋處會給numarry[1]複製當然這裡是沒有必要賦值的。
void countarry(int *numarry, int amount, const int *coins, int coinssize)
numarry[0] = 0;
// for (int i = 0; i < coinssize; i++)
}
2、動態規劃原理沒搞清,動態啊規劃思想是前一步所有可能+1到now時刻,哪一步最少,now時的次數就最少,這裡剛開始沒有+1,導致計算時結果都是0
for(int i = 1; i <= amount; i++)
}}
3、第三個誤去就是對小於1次可能性的刪選,當沒有可能得到結果時,要返回-1,這裡首先要搞清楚什麼時候會出現這中情況。
從道理上來講,當我10的時候,可能性大於10,那麼這種情況肯定時錯誤的,為了營造這種可能性,首先初始化的時候,把除了0的地方都複製為n+1,因此,沒走正常渠道,結果就是n+1.
int ret = numarry[amount];
if (numarry[amount] > amount)
free(numarry);
return ret;
for(int i = 0; i <= amount; i++)
leetcode322 零錢兌換
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11輸出 3解釋 11 5 5 1 示例 2 輸入 coins 2 amount 3...
leetcode 322 零錢兌換
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1示例 2 輸入 coins 2 amount ...
LeetCode 322 零錢兌換
322 零錢兌換 題目 給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 輸入 co...