diff --git a/CoinChange2.java b/CoinChange2.java new file mode 100644 index 00000000..e5bba99c --- /dev/null +++ b/CoinChange2.java @@ -0,0 +1,21 @@ +//Time Complexity: O(n * amount) where n is the number of coins +//Space Complexity: O(n * amount) where n is the number of coins +public class CoinChange2 { + int[][] comb; + public int change(int amount, int[] coins) { + comb = new int[coins.length + 1][amount + 1]; + for (int i = 0; i <= coins.length; i++) comb[i][amount] = 1; + for (int i = coins.length - 1; i >= 0; i--) { + for (int amt = amount; amt >= 0; amt--) { + comb[i][amt] = comb[i + 1][amt]; + if (coins[i] + amt <= amount) { + comb[i][amt] += comb[i][amt + coins[i]]; + + + } + + } + } + return comb[0][0]; + } +} diff --git a/PaintHouse.java b/PaintHouse.java new file mode 100644 index 00000000..07c17609 --- /dev/null +++ b/PaintHouse.java @@ -0,0 +1,23 @@ +//Time Complexity : O(n) +//Space Complexity : O(n) +public class PaintHouse { + public int minCost(int[][] costs) { + int m = costs.length; + int n = costs[0].length; + + int[][] dp = new int[m][n]; + + dp[0][0] = costs[0][0]; + dp[0][1] = costs[0][1]; + dp[0][2] = costs[0][2]; + + for(int i = 1; i < m; i++) { + dp[i][0] = costs[i][0] + Math.min(dp[i-1][1], dp[i-1][2]); + dp[i][1] = costs[i][1] + Math.min(dp[i-1][0], dp[i-1][2]); + dp[i][2] = costs[i][2] + Math.min(dp[i-1][0], dp[i-1][1]); + } + + return Math.min(dp[m-1][0], Math.min(dp[m-1][1], dp[m-1][2])); + + } +}