题解 | 兑换零钱(一)

兑换零钱(一)

https://www.nowcoder.com/practice/3911a20b3f8743058214ceaa099eeb45

/**
 * 最少货币数
 * @param arr int整型一维数组 the array
 * @param aim int整型 the target
 * @return int整型
 */
function minMoney(arr, aim) {
    // 初始化 dp 数组,大小为 aim + 1
    let dp = new Array(aim + 1).fill(Infinity); // 使用 aim + 1 作为初始值
    dp[0] = 0; // 组成金额 0 所需的货币数为 0

    // 遍历每个面值
    for (let i = 0; i < arr.length; i++) {
        // 遍历每个金额 j,从 arr[i] 到 aim
        for (let j = arr[i]; j <= aim; j++) {
            // 更新 dp[j]
            dp[j] = Math.min(dp[j], dp[j - arr[i]] + 1);
        }
    }

    // 如果 dp[aim] 仍然为初始值,说明无法组成目标金额
    return dp[aim] === Infinity ? -1 : dp[aim];
}

module.exports = {
    minMoney: minMoney
};

全部评论

相关推荐

2025-12-11 14:24
门头沟学院 Java
牛客35720396...:不要用boss,全是骗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务