Day 34

Coin Change II

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public int change(int amount, int[] coins) {
int[][] dp = new int[coins.length][amount + 1];
for (int i = 0; i < coins.length; i++) {
dp[i][0] = 1;
}

for (int j = 0; j < amount + 1; j++) {
if (j % coins[0] == 0)
dp[0][j] = 1;
}

for (int i = 1; i < coins.length; i++) {
for (int j = 0; j < amount + 1; j++) {
if (coins[i] > j)
dp[i][j] = dp[i - 1][j];
else
dp[i][j] = dp[i - 1][j] + dp[i][j - coins[i]];
}
}
return dp[coins.length - 1][amount];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
func change(amount int, coins []int) int {
dp := make([]int, amount+1)
dp[0] = 1

for i := 0; i < len(coins); i++ {
for j := coins[i]; j <= amount; j++ {
dp[j] += dp[j-coins[i]]
}
}

return dp[amount]
}

Combination Sum IV

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int combinationSum4(int[] nums, int target) {
int[] dp = new int[target + 1];
dp[0] = 1;
for (int j = 1; j <= target; j++) {
for (int i = 0; i < nums.length; i++) {
if (j - nums[i] >= 0) dp[j] += dp[j - nums[i]];
}
}

return dp[target];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
func combinationSum4(nums []int, target int) int {
dp := make([]int, target+1)
dp[0] = 1
for j := 1; j <= target; j++ {
for i := 0; i < len(nums); i++ {
if j-nums[i] >= 0 {
dp[j] += dp[j-nums[i]]
}
}
}
return dp[target]
}

Climbing Stairs

Use full bag solution

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public int climbStairs(int n) {
int[] dp = new int[n + 1];
dp[0] = 1;
for (int j = 1; j <= n; j++) {
for (int i = 1; i <= 2; i++) {
if (j - i >= 0) dp[j] += dp[j - i];
}
}
return dp[n];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
func climbStairs(n int) int {
dp := make([]int, n+1)
dp[0] = 1
for j := 1; j <= n; j++ {
for i := 1; i <= 2; i++ {
if j-i >= 0 {
dp[j] += dp[j-i]
}
}
}
return dp[n]
}