1. 程式人生 > >[Coding Made Simple] Coin Changes Number of ways to get a total

[Coding Made Simple] Coin Changes Number of ways to get a total

total there dynamic mina mini ges ber ble hang

Given coins of certain denominations and a total, how many ways these coins can be combined to get the total.

Dynamic Programming solution

State: T[i][j]: given the first i coins, the total number of ways these coins can be combined to get the total j.

Function: T[i][j] = T[i - 1][j] + T[i][j - coins[i - 1]], if j >= coins[i - 1];

     T[i][j] = T[i - 1][j], if j < coins[i - 1];

Initialization:

if the total is 0, then T[i][0] = 1,i is from 0 to coins.length; the only way is to not select any coins;

if there is no coins to select from, then T[0][j] = 0, j is from 1 to total, as there is 0 way to get a non zero total if we have no coins to select from;

Answer: T[coins.length][total];

 1 public class CoinChange {
 2     public int minCoinsToGetTotal(int[] coins, int total) {
 3         if(total == 0) {
 4             return 1;
 5         }
 6         if(total != 0 && (coins == null || coins.length == 0)) {
 7             return 0;
 8         }
9 int[][] T = new int[coins.length + 1][total + 1]; 10 for(int j = 0; j < T[0].length; j++) { 11 T[0][j] = 0; 12 } 13 for(int i = 0; i < T.length; i++) { 14 T[i][0] = 1; 15 } 16 for(int i = 1; i < T.length; i++) { 17 for(int j = 1; j < T[0].length; j++) { 18 if(j >= coins[i - 1]) { 19 T[i][j] = T[i - 1][j] + T[i][j - coins[i - 1]]; 20 } 21 else { 22 T[i][j] = T[i - 1][j]; 23 } 24 } 25 } 26 return T[coins.length][total]; 27 } 28 }

Related Problems

Coin Changes Minimum Number of Coins

[Coding Made Simple] Coin Changes Number of ways to get a total