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

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

posted @ 2017-08-18 13:30  Review->Improve  阅读(133)  评论(0编辑  收藏  举报