diff --git a/coin change.java b/coin change.java new file mode 100644 index 00000000..5c716a88 --- /dev/null +++ b/coin change.java @@ -0,0 +1,29 @@ +class Solution { + int[][] memo; + public int coinChange(int[] coins, int amount) { + int m = coins.length; + int n = amount; + this.memo = new int[m+1][n+1]; + + int re = helper(coins, 0, amount); + + if(re == 99999) return -1; + return re; + } + + private int helper(int[] coins, int i, int amount){ + + if(amount < 0 || i == coins.length) return 99999; + + if(amount == 0) return 0; + + if(memo[i][amount] != 0 ) return memo[i][amount]; + + int case0 = helper(coins, i+1, amount); + int case1 = 1 + helper(coins, i, amount - coins[i]); + + memo[i][amount] = Math.min(case0, case1); + + return Math.min(case0, case1); + } +} \ No newline at end of file diff --git a/house robber.java b/house robber.java new file mode 100644 index 00000000..99ee0745 --- /dev/null +++ b/house robber.java @@ -0,0 +1,16 @@ +class Solution { + public int rob(int[] nums) { + if(nums.length == 1) return nums[0]; + if(nums.length == 2) return Math.max(nums[0],nums[1]); + int[] dp = new int[nums.length]; + dp[0] = nums[0]; + dp[1] = Math.max(nums[0],nums[1]); + for(int i = 2; i< nums.length; i++) { + + int case0 = dp[i-1]; + int case1 = nums[i] + dp[i-2]; + dp[i]=Math.max(case0, case1); + } + return dp[nums.length-1]; + } +} \ No newline at end of file