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

leetcode 518. 零钱兑换 II

题目如下
在这里插入图片描述
数据范围
在这里插入图片描述

这题问能找到零的方法数量,首先可以把它当成跳格子即把amount当成目标把硬币面额当成一次可以跳的台阶数。 如下
        
            for (int j = coins[i]; j <= amount; j++) {
                  for (int i = 0; i < n; i++) {
                dp[j] += dp[j - coins[i]];
            }
        }
这样想已经接近正确答案了 但是在跳格子中先跳1步再跳2步和先跳2步再跳1步是两种不同的方法,显然找零是不能像这样重复的,故我们要想办法排除重复计算。
即考虑将i的循环放到最外面因为我们可以得到 1 2却不能得到2 1即通过确定找零顺序排除了重复计算。
为了防止有人不能理解,我们还可以这样理解:我们只是把所有的找零序列按照面额从小到大排序,而我们这样做是不是可以枚举出所有面额从小到大的找零序列?故这样做是正确的。
注意:令人忍俊不禁的是官方说答案不会溢出,但是提交以后发现有些计算过程存在溢出所以还要验证答案是不是存在。

通过代码

class Solution {
public:
    int change(int amount, vector<int>& coins) {
        int n = coins.size();
        vector<int> dp(amount + 1, 0);
        vector<bool> is(amount + 1, false);
        dp[0] = 1;
        is[0] = true;
        for (int i = 0; i < n; i++) {
            for (int j = coins[i]; j <= amount; j++) {
                is[j]  = is[j] || is[j - coins[i]];
            }
        }
        if(!is[amount])return 0;
        for (int i = 0; i < n; i++) {
            for (int j = coins[i]; j <= amount; j++) {
                dp[j] += dp[j - coins[i]];
            }
        }
        return dp[amount];
    }
};

在这里插入图片描述

相关文章:

  • 美团将为全职及稳定兼职骑手缴纳社保,未来将覆盖所有骑手
  • 扩展 Cargo 的自定义命令
  • 23种设计模式 - 解释器模式
  • 视频帧的划分与冗余信息去除的关系
  • 4.7 学习UVM中的阶段机制,应用到具体示例分为几步?
  • uniapp uni.request重复请求处理
  • “以数治税”时代 数据要素的价值挖掘
  • C 指针和整数的加减法运算
  • 六、soul源码学习-SpringCloud项目本地运行
  • 【核心算法篇十七】《深度解析DeepSeek概率图模型:贝叶斯网络推理引擎的技术内核》
  • 【如何基于Debian构建Kali Linux】
  • Linux-进程概念
  • 配置haproxy实现MySQL服务器负载均衡
  • 【技术前沿】中安购物小票识别系统:1秒内精准识别,助力商场智能化升级!
  • 撕碎QT面具(7):container控件被spacer挤扁,无法进行控件添加的处理方案。
  • YOLOv12从入门到入土(含结构图)
  • Mysql测试连接失败
  • 【机器学习】K折交叉验证(K-Fold Cross-Validation)
  • Jenkins插件管理切换国内源地址
  • 基于STM32+ESP8266+手机 APP+阿里云的智能小车设计与实现(系统资料)
  • 一图读懂丨创新创业人才最高补贴500万元!临港新片区发布创客新政“十二条”
  • 龚正会见哥伦比亚总统佩特罗
  • GDP逼近五千亿,向海图强,对接京津,沧州剑指沿海经济强市
  • 中国-拉共体论坛第四届部长级会议北京宣言
  • 上海杨浦:鼓励龙头企业与高校共建创新联合体,最高支持200万元
  • 迪奥部分客户数据遭泄露,公司称正持续展开调查