這道題一開始使用列舉。超時了。少了些優化。
看了題解,原來是廣搜。這都想不到。
廣搜
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...