1. 程式人生 > 其它 >1449. 數位成本和為目標值的最大數字

1449. 數位成本和為目標值的最大數字

題目來源: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