leedcode 零錢兌換

2021-08-31 18:50:30 字數 1618 閱讀 5061

給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。

示例1

輸入: coins = [1,2,5], amount = 3

輸出: 3

解釋: 11=5+5+1

示例2
輸入: coins = [ 2], amount = 3

輸出: -1

解釋: 不存在

思路

動態規劃:

f(x)=min+1 , i=1,2,3…n 這是遞推公式,f(x)表示湊足x的錢最少的硬幣數。其中f(0)=0

//通過動態規劃來解決

func

coinchange

(coins [

]int

, amount int

)int

dp:=

make([

]int

,amount+1)

dp[0]

=0for i :=

1yi; i < amount+

1; i++

if min == math.maxint64

else}}

return dp[amount]

}

給定不同面額的硬幣和乙個總金額。寫出函式來計算可以湊成總金額的硬幣組合數。假設每一種面額的硬幣有無限個。

注意: 你可以假設

0 <= amount (總金額) <= 5000

1 <= coin (硬幣面額) <= 5000

硬幣種類不超過500種

結果符合32位符號整數

示例1

輸入: amount = 5, coins = [1, 2, 5]

輸出: 4

解釋: 有四種方式可以湊成總金額:

5=55=2+2+1

5=2+1+1+1

5=1+1+1+1+1

示例2
輸入: amount = 3, coins = [2]

輸出: 0

解釋: 只用面額2的硬幣不能湊成總金額3。

示例3
輸入: amount = 3, coins = [2]

輸出: 0

解釋: 只用面額2的硬幣不能湊成總金額3。

思路

動態規劃:

f(x)=f(x-ci)+f(x) , i=1,2,3…n ,f(0)=1

//通過動態規劃來解決

func

coinchange2

(coins [

]int

, amount int

)int

if amount <0||

len(coins)==0

dp:=

make([

]int

,amount+1)

dp[0]

=1for i:=

len(coins)-1

;i>=

0;i--}}

return dp[amount]

}

LeedCode 零錢置換

給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 分析 本題思路是動態規劃處理,狀態陣列f i 表示總錢...

零錢兌換 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...

零錢兌換問題

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