博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C++&Rust]LeetCode No.518 零钱兑换 II(每日一题)
阅读量:4048 次
发布时间:2019-05-25

本文共 1337 字,大约阅读时间需要 4 分钟。

原贴地址:

题目

给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 

 

    示例 1:

    输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1

    示例 2:

    输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。

    示例 3:

    输入: amount = 10, coins = [10] 输出: 1

     

    注意:

    你可以假设:

    • 0 <= amount (总金额) <= 5000
    • 1 <= coin (硬币面额) <= 5000
    • 硬币种类不超过 500 种
    • 结果符合 32 位符号整数

    思路分析

    这个题非常简单,我们直接用dp的思想去思考即可。

    状态量只有一个,就是金额,也就是说,我们对总金额amount进行dp即可。
    dp[i]自然表示的就是总金额为i元时的方案数。
    递推公式也很好出,dp[i] += dp[i - coins[t]]

    这里有没有发现一个问题,递推式其实跟题目中的某一句话没有关系,”每一种面额的硬币有无数个“,不管硬币的数量有多少,或者是只有一个,我们的递推公式都没有任何变化。

    那么如果有之前做过这两类题目的同学,应该就能知道区别了,每一种有无限个,我们从前向后遍历dp数组,每种只有一个的时候,我们从后向前遍历dp数组。

    虽然递推式都是dp[i] += dp[i - coins[t]]不变的。

    这一点非常关键。

    C++代码

    class Solution {
    public: int change(int amount, vector
    & coins) {
    vector
    dp(amount + 1); dp[0] = 1; for (auto & coin : coins) for (int i = 0; i <= amount - coin; ++i) dp[i + coin] += dp[i]; return dp[amount]; }};

    Rust代码

    impl Solution {    pub fn change(amount: i32, coins: Vec
    ) -> i32 { let amount = amount as usize; let mut v = vec![0; amount + 1]; v[0] = 1; for coin in coins { for i in 0..=(amount as i32 - coin) { v[(i + coin) as usize] += v[i as usize]; } } v[amount] }}

    转载地址:http://duuci.baihongyu.com/

    你可能感兴趣的文章
    聚合函数是否可以写在order by后面,为什么?
    查看>>
    什么情况下 Hive 可以避免进行 MapReduce?
    查看>>
    Hive 的文件存储格式怎么选择?
    查看>>
    Hive 的数据压缩格式怎么选择?
    查看>>
    Hive 的 SerDe 是什么?
    查看>>
    Hive 中如何解决多字符分割场景?
    查看>>
    一篇文章搞懂 Hive 的调优思路
    查看>>
    HBase是什么?有什么特点?
    查看>>
    HBase 和 RDBMS 相比有什么区别?
    查看>>
    一篇文章搞懂 HBase 的整体架构
    查看>>
    HBase 表的数据模型是什么?
    查看>>
    3 张图搞懂 HBase 的存储原理.md
    查看>>
    一篇文章搞懂 HBase 的 flush 机制和 compact 机制
    查看>>
    一篇文章搞懂 HBase 的 region 拆分机制
    查看>>
    HBase 表的预分区是什么?为什么要预分区?如何预分区?
    查看>>
    Flume 是什么?Flume 有什么特点?
    查看>>
    一篇文章搞懂 Flume 的架构设计
    查看>>
    Flume 是怎么保障可靠性的?
    查看>>
    Flume 怎样实现数据的断点续传?
    查看>>
    Flume 如何自定义 Mysql Source?
    查看>>