换钱的最少货币数/零钱兑换
题目:给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。如果无解,请返回-1。【要求】时间复杂度O(n×aim),空间复杂度On。
思路:
代码:
1 /** 2 * 最少货币数 3 * @param arr int整型一维数组 the array 4 * @param aim int整型 the target 5 * @return int整型 6 */ 7 function minMoney( arr , aim ) { 8 // write code here 9 arr.sort((a,b) => (a-b)); 10 let dp = new Array(aim + 1); 11 dp[0] = 0; 12 for(let i = 1; i<= aim;i++){ 13 let min_coins = Infinity; 14 for(let j = 0; j < arr.length; j++){ 15 if(i - arr[j] >= 0){ 16 let num_coins = dp[i-arr[j]] + 1; 17 if(num_coins < min_coins){ 18 min_coins = num_coins; 19 } 20 } 21 } 22 dp[i] = min_coins; 23 } 24 if(dp[aim] === Infinity){ 25 return -1; 26 } 27 return dp[aim]; 28 } 29 module.exports = { 30 minMoney : minMoney 31 };

浙公网安备 33010602011771号