leetcode零錢兌換

2021-10-04 00:25:59 字數 741 閱讀 6561

1.遞迴+回溯

記錄每種錢幣能夠使用的最大數量,然後遍歷每一種情況,求錢幣數量最小的,但會超時

2.動態規劃

設定dp[amount+1],初始值設為0x3f3f3f3f,即為無窮大

dp[i]表示總量是i是,coins中的金幣組成i所需的最小金幣個數

此處以錢幣為1 2 5,總額是11舉例

dp[11]=dp[10]+1,即組成10的最小金幣個數加    幣值1的個數1

dp[11]=dp[9]+1,即組成9的最小金幣個數加   幣值2的個數1

dp[11]=dp[6]+1,即組成6的最小金幣個數加 幣值5的個數1

知dp[11]=min(dp[10],dp[9],dp[6])+1

一般的,對dp[i],遍歷coins,當coins[j]<=i,即組成i的最優解可以使用coins[j],有公式:

dp[i]=min(dp[i],dp[i-coins[j]]+1);

若最終dp[i]==0x3f3f3f3f,表示無法使用coins中的金幣組成i

**如下:

class solution 

}if(dp[amount]==0x3f3f3f3f)

return -1;

return dp[amount];}};

零錢兌換 leetcode

思路 建乙個動態陣列dp,大小為amount 1,dp裡面的值初始化為amount 1。dp i 表示總金額i最少可以用dp i 的零錢兌換,如果coins j 比i小,那麼總金額i可以由dp i conis j 再加上這枚零錢構成,dp i min dp i dp i coins j 1 如果dp...

LeetCode 零錢兌換

q 給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 輸入 coins 2 amou...

leetCode 零錢兌換問題

零錢兌換問題 已知各種金幣面值costs i 每種面值可無限使用 求兌換出指定金額target的最小錢幣數。此題有dfs等的解法,這裡只介紹完全揹包的解法 先上狀態轉移方程 f i v 表示處理前i種錢幣時,剛好兌換面值為v時的錢幣數,則 f i v min 上述方程簡化為一維陣列實現 可參考我的揹...