LeetCode 322 零錢兌換

2021-10-05 05:13:18 字數 759 閱讀 9396

這道題一開始使用列舉。超時了。少了些優化。

看了題解,原來是廣搜。這都想不到。

廣搜

class solution 

};int bfs()

};

動態規劃,本質和廣搜一樣,但是快了10倍。

class solution 

}if(dp[amount]==inf)

return -1;

else

}};

深搜

一開始先從大面額的最大數量快速湊,湊不對再回溯,減少大面額的。

優化的地方

1.已經使用的數量傳遞下去,不要返回來,這樣可以**更簡單(不需要返回是否湊齊了,再最深層直接判斷)、可以優化剪枝。

2.關鍵的剪枝地方,不然超時。刪掉一張大面額,肯定要用更多的小面額來湊。所以先計算當前大面額可以用的最大數量,如果已經使用的數量加上這個最大數量大於已經計算出的答案,那麼減少1張大面額,會至少增加兩張小面額。所以減少再多的大面額,數量就會更多,直接break。

class solution 

if(pos==n)

if(count>=ans)

int max_count=left/coins[pos];

for(int i=max_count;i>=0 && count+i& coins_, int 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...