美文网首页
518. Coin Change 2

518. Coin Change 2

作者: 尚无花名 | 来源:发表于2019-04-28 02:31 被阅读0次

有一阵没写这道题,愣了一阵子。
刚开始在考虑用BFS来解,后来意识到这是不是求最少有多少个硬币而是有多少种。
而且是个combination而不是permutation
这种问题用dfs肯定可以做,但这种求有多少种的问题用DFS就不明智了。
这种一般是用DP来做
dp[i][j]的状态定义: 用前j种硬币组成i块钱时有多少种可能性。
这里要想一下,dp[i][j]一定要用上所有j种硬币吗?想了一下感觉没有必要加这个限制

induction rule
dp[i][j] = d[i][j - 1] 再加上下面的
如果i >= coin[j] 的话, 则再加上dp[i - coin[j]][j]. 取了一个coins[j] , 然后还可以继续取。
初始化时
dp[0][] = 1;
dp[
> 0][0] = 0;
代码见下:

public int change(int amount, int[] coins) {
        //dp[i][j] 组成 i 块钱, 用 前j种币 
        int M = coins.length;
        int[][] dp = new int[amount + 1][M + 1];
        // dp[0][*] = 1;
        for (int j = 0; j <= M; j++) dp[0][j] = 1;
        //dp[*][0] = 0; * > 0
        for (int i = 1; i <= amount; i++) {
            for (int j = 1; j <= M; j++) {
                dp[i][j] = dp[i][j - 1];
                if (i >= coins[j - 1]) dp[i][j] += dp[i - coins[j - 1]][j];
            }
        }
        return dp[amount][M];
    }

相关文章

  • 518. Coin Change 2

    思路 动态规划 用一个数组dp存储结果,dp[i]表示amount=i时的组合数目。 初始态:dp[0]=1 遍历...

  • 518. Coin Change 2

    有一阵没写这道题,愣了一阵子。刚开始在考虑用BFS来解,后来意识到这是不是求最少有多少个硬币而是有多少种。而且是个...

  • 【DP】518. Coin Change 2

    问题描述: You are given coins of different denominations and ...

  • Coin Change 2

    题目来源给一个钱数以及一些硬币,硬币可以无限取,问有多少种组合方案。一看就是一道DP题,但是太久没刷题,手生。导致...

  • Coin Change 2

    You are given coins of different denominations and a tota...

  • leetcode-12

    Coin Change Boundary: There may be no possible change, so...

  • Coin Change

    题目You are given coins of different denominations and a to...

  • Coin Change

    题目来源一道简单的DP题,n种硬币,要求组成某个数值的硬币数最少,代码如下: 看了下讨论区,感觉可以写的更简洁一下...

  • coin change

    最简单的DP

  • coin change

    You are given coins of different denominations and a tota...

网友评论

      本文标题:518. Coin Change 2

      本文链接:https://www.haomeiwen.com/subject/uklrnqtx.html