• leetcode518dp背包


    
    /**
     * <p>给你一个整数数组 <code>coins</code> 表示不同面额的硬币,另给一个整数 <code>amount</code> 表示总金额。</p>
     *
     * <p>请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 <code>0</code> 。</p>
     *
     * <p>假设每一种面额的硬币有无限个。 </p>
     *
     * <p>题目数据保证结果符合 32 位带符号整数。</p>
     *
     * <p> </p>
     *
     * <ul>
     * </ul>
     *
     * <p><strong>示例 1:</strong></p>
     *
     * <pre>
     * <strong>输入:</strong>amount = 5, coins = [1, 2, 5]
     * <strong>输出:</strong>4
     * <strong>解释:</strong>有四种方式可以凑成总金额:
     * 5=5
     * 5=2+2+1
     * 5=2+1+1+1
     * 5=1+1+1+1+1
     * </pre>
     *
     * <p><strong>示例 2:</strong></p>
     *
     * <pre>
     * <strong>输入:</strong>amount = 3, coins = [2]
     * <strong>输出:</strong>0
     * <strong>解释:</strong>只用面额 2 的硬币不能凑成总金额 3 。
     * </pre>
     *
     * <p><strong>示例 3:</strong></p>
     *
     * <pre>
     * <strong>输入:</strong>amount = 10, coins = [10]
     * <strong>输出:</strong>1
     * </pre>
     *
     * <p> </p>
     *
     * <p><strong>提示:</strong></p>
     *
     * <ul>
     * <li><code>1 <= coins.length <= 300</code></li>
     * <li><code>1 <= coins[i] <= 5000</code></li>
     * <li><code>coins</code> 中的所有值 <strong>互不相同</strong></li>
     * <li><code>0 <= amount <= 5000</code></li>
     * </ul>
     * <div><div>Related Topics</div><div><li>数组</li><li>动态规划</li></div></div><br><div><li> 860</li><li> 0</li></div>
     */
    
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int change(int amount, int[] coins) {
            int n = coins.length;
    
            //前n个硬币 构成amount
            int[][] dp = new int[n + 1][amount + 1];
            for (int i = 0; i <= n; i++) {
                dp[i][0] = 1;
            }
    
            //当前等于 上一个结果个数+【当前面纸硬币】【凑成的金额】
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= amount; j++) {
                    if (j - coins[i - 1] >= 0) {
                        dp[i][j] = dp[i - 1][j] + dp[i][j - coins[i - 1]];
                    } else {
                        dp[i][j] = dp[i - 1][j];
                    }
                }
            }
            return dp[n][amount];
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
    
    
  • 相关阅读:
    怎么为学生布置作业
    新学期的第一节Android课
    RUCSE小组博客列表
    test
    个人最终总结
    黄金点小游戏的设计与实现
    WordCount 程序的实现
    阅读下面程序,请回答如下问题:
    Visual Studio 2015的安装和简单的单元测试
    构建之法--软件工程学习随笔之二
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/16453671.html
Copyright © 2020-2023  润新知