硬幣。給定數量不限的硬幣,幣值為25分、10分、5分和1分,編寫**計算n分有幾種表示法。(結果可能會很大,你需要將結果模上1000000007)
示例1:輸入: n = 5
輸出:2
解釋: 有兩種方式可以湊成總金額:
5=55=1+1+1+1+1
示例2:輸入: n = 10
輸出:4
解釋: 有四種方式可以湊成總金額:
10=10
10=5+5
10=5+1+1+1+1+1
10=1+1+1+1+1+1+1+1+1+1
說明:這道題很容易就能看出來是乙個揹包問題。每個物品有無限個,怎麼放進去揹包。但也很容易寫出錯誤**。注意:你可以假設:
0 <= n (總金額) <= 1000000
比如下面這種:
for
(int i =
1; i <= n; i++
)}
先遍歷數字情況,在遍歷硬幣,這麼做會有乙個問題:
假設我們有1元和5元硬幣。當我們需要組合出7元時候,這個程式會把(2+5)和(5+2)算成兩種,也就是說這麼沒辦法解決方案的順序問題。
正確的方法應該是先遍歷硬幣,回想揹包問題,我們無論哪種揹包,都是在最外層先遍歷每個物品的,內層是揹包容量。
在最外層遍歷硬幣,可以保證之後的硬幣不會再用到之前的硬幣,這麼就不會重複了。
public
intwaystochange
(int n)
;for
(int i =
0; i < coins.length; i++)}
return dp[n]
;}
leetcode 86/100 面試題 08 11 硬幣
硬幣。給定數量不限的硬幣,幣值為25分 10分 5分和1分,編寫 計算n分有幾種表示法。結果可能會很大,你需要將結果模上1000000007 示例1 輸入 n 5 輸出 2 解釋 有兩種方式可以湊成總金額 5 55 1 1 1 1 1 示例2 輸入 n 10 輸出 4 解釋 有四種方式可以湊成總金額...
面試題 08 11 硬幣 過
硬幣。給定數量不限的硬幣,幣值為25分 10分 5分和1分,編寫 計算n分有幾種表示法。結果可能會很大,你需要將結果模上1000000007 示例1 輸入 n 5 輸出 2 解釋 有兩種方式可以湊成總金額 5 55 1 1 1 1 1 和零錢兌換 ii的思路是一樣的,或者說基本上就是一道題 publ...
Leetcode 322 面試題08 11 湊硬幣
322.給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。面試題08.11.給定數量不限的硬幣,幣值為25分 10分 5分和1分,編寫 計算n分有幾種表示法。結果可能會很大,你需要將結果模...