/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最少货币数 * @param arr int整型一维数组 the array * @param aim int整型 the target * @return int整型 */ function minMoney( arr , aim ) { // write code here let len = arr.length; let dp = Array.from({length:aim+1},()=>Infinity); dp[0] = 0; //动态规划: //dp[i]表示兑换i面值需要兑换的最小次数 //当前需要找的面额为i,当前的零钱arr[j]; // dp[i-arr[j]]则表示减去当前零钱值得最小次数 // dp[i-arr[j]]+1则表示加上当前零钱的最小次数 //所以状态转移方程就是:dp[i] = Math.min(dp[i],dp[i-arr[j]]+1) for(let i = 1;i<=aim;i++){ for(let j=0;j<len;j++){ if(arr[j]<=i){//当前需要兑换的钱需要大于零钱才行,不然兑换不了 dp[i]= Math.min(dp[i],dp[i-arr[j]]+1) } } } return dp[aim]===Infinity?-1:dp[aim] } module.exports = { minMoney : minMoney };