for (var i of arr) {遍历钱数组arrfor (var j = i; j <= target; j++) {- 使用
arr[i]凑出[ arr[i] , target ]这个区间面额的硬币个数
var coinChange = function (arr, target) {
var dp = new Array(target + 1).fill(Infinity);
dp[0] = 0;
for (var i of arr) {
for (var j = i; j <= target; j++) {
dp[j] = Math.min(dp[j], dp[j - i] + 1);
}
}
return dp[target] == Infinity ? -1 : dp[target];
};
代码调试
console.log(coinChange([2, 4, 5], 15));