12.24随笔

这里是12.24随笔
题目留档:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

你可以认为每种硬币的数量是无限的。

示例 1:

输入:coins = [1, 2, 5], amount = 11
输出:3
解释:11 = 5 + 5 + 1
示例 2:

输入:coins = [2], amount = 3
输出:-1
示例 3:

输入:coins = [1], amount = 0
输出:0
代码留档:
class Solution {
public:
int coinChange(vector& coins, int amount) {
// 定义dp数组,dp[i]表示凑成金额i所需的最少硬币数
vector dp(amount + 1, INT_MAX);
dp[0] = 0; // 凑成金额0需要0个硬币

    // 遍历每个硬币
    for (int coin : coins) {
        // 从coin开始,更新dp数组
        for (int i = coin; i <= amount; ++i) {
            if (dp[i - coin] != INT_MAX) {
                dp[i] = min(dp[i], dp[i - coin] + 1);
            }
        }
    }
    
    // 如果dp[amount]仍为INT_MAX,表示无法凑成amount
    return dp[amount] == INT_MAX ? -1 : dp[amount];
}

};

posted @   Thanatos。syts  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示