1449. 數位成本和為目標值的最大數字
阿新 • • 發佈:2021-06-13
題目來源:1449. 數位成本和為目標值的最大數字
給你一個整數陣列cost
和一個整數target
。請你返回滿足如下規則可以得到的最大整數:
- 給當前結果新增一個數位(
i + 1
)的成本為cost[i]
(cost
陣列下標從 0 開始)。 - 總成本必須恰好等於
target
。 - 新增的數位中沒有數字 0 。
由於答案可能會很大,請你以字串形式返回。
如果按照上述要求無法得到任何整數,請你返回 "0" 。
解題思路:
1.求最大整數,可以轉化從cost中取出的數最多。利用動態規劃求解 2.根據動態規劃獲取到的陣列反向輸出最大值/** * @param {number[]} cost * @param {number} target * @return {string}*/ var largestNumber = function(cost, target) { let n = cost.length; let dp = new Array(target+1).fill(-Number.MAX_VALUE); dp[0] = 0; for(let i=0;i<n;i++){ for(let j=cost[i];j<=target;j++){ dp[j] = Math.max(dp[j], dp[j-cost[i]]+1); } }if(dp[target]<0){ return '0'; } let res = []; for(let i=n-1 , j=target;i>=0;i--){ let c= cost[i]; for( ;j>=c&&(dp[j] == dp[j-c]+1) ;j-=c){ res.push(i+1) } } return res.join(''); };
示例 1:
輸入:cost = [4,3,2,5,6,7,2,5,5], target = 9 輸出:"7772" 解釋:新增數位 '7' 的成本為 2 ,新增數位 '2' 的成本為 3 。所以 "7772" 的代價為 2*3+ 3*1 = 9 。 "977" 也是滿足要求的數字,但 "7772" 是較大的數字。 數字 成本 1 -> 4 2 -> 3 3 -> 2 4 -> 5 5 -> 6 6 -> 7 7 -> 2 8 -> 5 9 -> 5
示例 2:
輸入:cost = [7,6,5,5,5,6,8,7,8], target = 12 輸出:"85" 解釋:新增數位 '8' 的成本是 7 ,新增數位 '5' 的成本是 5 。"85" 的成本為 7 + 5 = 12 。
示例 3:
輸入:cost = [2,4,6,2,4,6,4,4,4], target = 5 輸出:"0" 解釋:總成本是 target 的條件下,無法生成任何整數。
示例 4:
輸入:cost = [6,10,15,40,40,40,40,40,40], target = 47 輸出:"32211"
提示:
cost.length == 9
1 <= cost[i] <= 5000
1 <= target <= 5000