November 02, 2019

322. Coin Change

322. Coin Change

经典动态规划背包问题,dp[i][j]表示用前i种硬币能达到金额j的最小硬币数量。
这里是一个讲解很好的视频。
Time = O(n*amount), space = O(amount)

class Solution {
    public int coinChange(int[] coins, int amount) {
        int[] numOfCoins = new int[amount + 1];
        numOfCoins[0] = 0;
        for (int i = 1; i < numOfCoins.length; i++) {
            numOfCoins[i] = Integer.MAX_VALUE - 1;
        }
        for (int i = 0; i < coins.length; i++) {
            for (int j = 1; j <= amount; j++) {
                if (coins[i] <= j) {
                    numOfCoins[j] = Math.min(numOfCoins[j], 1 + numOfCoins[j - coins[i]]);
                }
            }
        }
        return numOfCoins[amount] > amount ? -1 : numOfCoins[amount];
    }
}
comments powered by Disqus