当前位置: 首页 > news >正文

322 零钱兑换

步骤1:定义状态数组

定义 dp[i] 表示组成金额 i 所需的最少硬币数。

步骤2:状态转移方程

对于每个硬币 coin 和金额 i,若 coin ≤ i,则尝试用该硬币更新状态

逻辑解释:若用 coin 面额硬币,则当前最少硬币数为 dp[i - coin] + 1(加1表示使用这枚硬币)

步骤3:遍历顺序

采用外层遍历硬币,内层遍历金额的正序填充方式(完全背包特性)

遍历顺序说明:完全背包问题中,每个硬币可以重复使用,因此内层循环正序更新。

步骤4:处理结果

最终检查目标金额是否可达

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        if (amount == 0) return 0;
        vector<int> dp(amount + 1, INT_MAX);
        dp[0] = 0;

        for (auto coin : coins) {
            for (int i = coin; i <= amount; ++i) {
                if (dp[i - coin] != INT_MAX) {
                    dp[i] = min(dp[i - coin] + 1, dp[i]);
                }
            }
        }
        return dp[amount] == INT_MAX ? -1 : dp[amount];
    }
};

相关文章:

  • 【大模型基础_毛玉仁】4.4 低秩适配方法
  • RocketMQ 4.x、5.x 性能对比
  • 绩效考核如何从形式化任务升级为公司战略工具?
  • 2025.3.25
  • 基于CondLaneNet论文和全卷积分割头的车道线head设计
  • QML输入控件: Dial基本用法与样式定制(1)
  • 【机器学习】imagenet2012 数据预处理数据预处理
  • K8S学习之基础五十二:k8s配置jenkins
  • Vite 与 Nuxt 深度对比分析
  • 软件设计模式-第一章
  • 数据源为postgres的多表关联flink开发需求,开发思路
  • jmeter通过json提取器获取接口返回token(超详细)
  • 3.1.2 内存池
  • Java.util包之Java.util.List接口
  • 【msyql】LInux安装Mysql
  • kubernetes高级应用之初始化容器
  • 第 6 章 | 区块链预言机操控与闪电贷攻击全解析
  • 数据结构之队列的链式结构-初始化-判断队列是否为空-入队-出队-获取队头元素
  • 八目导航 version:1.2
  • Linux 中进程的 nice 值对程序的占用的影响测试
  • 印巴开始互袭军事目标,专家:冲突“螺旋式升级”后果或不可控
  • 巴军事行动致印度70%电网瘫痪
  • 巴基斯坦首都及邻近城市听到巨大爆炸声
  • 中铁房地产24.7亿元竞得上海松江新城宅地,溢价率20.42%
  • 动物只有在被认为对人类有用时,它们的建筑才会被特别设计
  • 网民反映“潜水时遭遇服务质量不佳”,三亚开展核查调查