網(wǎng)站建設(shè)報價單鄭州網(wǎng)絡(luò)推廣團隊
鏈接:322. 零錢兌換 - 力扣(LeetCode)
題目:
給你一個整數(shù)數(shù)組?
coins
?,表示不同面額的硬幣;以及一個整數(shù)?amount
?,表示總金額。計算并返回可以湊成總金額所需的?最少的硬幣個數(shù)?。如果沒有任何一種硬幣組合能組成總金額,返回?
-1
?。你可以認為每種硬幣的數(shù)量是無限的。
示例?1:
輸入:coins =[1, 2, 5]
, amount =11
輸出:3
解釋:11 = 5 + 5 + 1示例 2:
輸入:coins =[2]
, amount =3
輸出:-1示例 3:
輸入:coins = [1], amount = 0 輸出:0提示:
1 <= coins.length <= 12
1 <= coins[i] <= 231 - 1
0 <= amount <= 104
思路:
我使用的是廣搜的方式,使用棧結(jié)構(gòu),這樣其實是比較慢的,但是還是做出來了。
代碼:
/*** @param {number[]} coins* @param {number} amount* @return {number}*/var coinChange = function(coins, amount) {if(amount == 0) return 0let num = [...coins] , set = new Set([...num]) , count = 1while(num.length!=0){let n = num.lengthfor(let i = 0 ; i < n ; i++ ){// 用count代表層數(shù)if(num[0]==amount) return count//將num[0]與coins中每個數(shù)相加,將不重復(fù)的入棧coins.forEach(function(value, index, array){let item = value + num[0]//用set解決去重問題//一定要加上item<=amount條件,不然會變成死循環(huán)if(!set.has(item)&&item<=amount){set.add(item)num.push(item)}})// 將第一個元素移除num.shift()}count++}return -1};