zoukankan      html  css  js  c++  java
  • [LeetCode 518] Coin Change 2

    You are given coins of different denominations and a total amount of money. Write a function to compute the number of combinations that make up that amount. You may assume that you have infinite number of each kind of coin.

     

    Example 1:

    Input: amount = 5, coins = [1, 2, 5]
    Output: 4
    Explanation: there are four ways to make up the amount:
    5=5
    5=2+2+1
    5=2+1+1+1
    5=1+1+1+1+1
    

    Example 2:

    Input: amount = 3, coins = [2]
    Output: 0
    Explanation: the amount of 3 cannot be made up just with coins of 2.
    

    Example 3:

    Input: amount = 10, coins = [10] 
    Output: 1
    

     

    Note:

    You can assume that

    • 0 <= amount <= 5000
    • 1 <= coin <= 5000
    • the number of coins is less than 500
    • the answer is guaranteed to fit into signed 32-bit integer

    For a given amount A, all possible ways to get A can be divided into two cases:

    1. No coins[i] is used; 2. At least one coins[i] is used.

    So if we iterate through all possible denominations and for each denomination, count the number of ways to get a given amount j by picking the current denomination.  The total number of ways for each possible amount j is just the sum after iterating each denomination.

    dp[i]: the total number ways to get amount i. 

    class Solution {
        public int change(int amount, int[] coins) {
            int[] dp = new int[amount + 1];
            dp[0] = 1;
            for(int i = 0; i < coins.length; i++) {
                for(int j = coins[i]; j <= amount; j++) {
                    dp[j] += dp[j - coins[i]];
                }
            }
            return dp[amount];
        }
    }
  • 相关阅读:
    自学java--5
    自学java--4
    自学java--3
    自学java--2
    自学java--1
    java中的IO操作---File类
    TCP/UDP编程实例
    什么是服务端与客户端详解
    【提高组】并查集
    【ToDoList】自己选择的路跪着也要走下去
  • 原文地址:https://www.cnblogs.com/lz87/p/11986697.html
Copyright © 2011-2022 走看看