Leetcode322 零錢兌換

2021-10-03 15:55:03 字數 1068 閱讀 9414

思路:一開始想起來的就是給現有的零錢進行排序,然後選取最大面值的零錢,進行回溯,找到就立即退出,這樣的做法沒有考慮到1,7,10 amount = 14這種情況,10,1,1,1,1與7,7肯定是最少兩個硬幣。如果說遍歷所有的情況,不提前退出,會出現超時的情況。那麼回溯的時候不用每次都只減乙個coins[i],而是每次減個amount/coins[i]coins[i],這樣的話也不行,沒有考慮到2,4,5 amount= 11這種情況,因為一次性減25的話,由於找不到1,結果就是-1,其實結果應該是2,4,5,結果為3

所以這道題用dfs是需要花費些心思的,還需要進行剪枝來防止超時的發生。

class

solution

else

}public

void

helper

(int

coins,

int amount,

int count,

int index)

if(index <0)

return

;for

(int k = amount/coins[index]

;k >=

0&& k + count < min;k--)}

}

第二種做法就是使用動態規劃方法

f(i)為為實現為i的錢數需要多少硬幣,總共的硬幣面額為2,3,4

f(1) = min(f(1-2),f(1-3),f(1-4))+1;

f(2)= min(f(2-2),f(2-3),f(2-4))+1;

f(3)=min(f(3-2),f(3-3),f(3-4))+1;..

.f(i) = min(f(i-2),f(i-3),f(i-4))+1;

class

solution}}

return dp[amount]

== amount+1?

-1:dp[amount];}

}

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...