From 1960c60a9db885d632629e234aee2a1610be4e2e Mon Sep 17 00:00:00 2001 From: pcparagc Date: Sun, 16 Aug 2026 22:52:48 -0400 Subject: [PATCH 1/3] DP 1 --- LC198_DP_house_robber.py | 26 ++++++++++++++++++++++++++ LC322_DP_coin_change.py | 21 +++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 LC198_DP_house_robber.py create mode 100644 LC322_DP_coin_change.py diff --git a/LC198_DP_house_robber.py b/LC198_DP_house_robber.py new file mode 100644 index 00000000..064b1dec --- /dev/null +++ b/LC198_DP_house_robber.py @@ -0,0 +1,26 @@ +# Time Complexity : O(n) +# Space Complexity : O(1) +# Did this code successfully run on Leetcode : yes +# Any problem you faced while coding this : No + +# Approach: at each house, choosing max(skip current, rob current + money from i-2) while keeping only the previous two DP values + + +def coinChange(coins: list[int], amount: int) -> int: + m = len(coins) + n = amount + # m rows and n cols + dp = [0] * (n + 1) + + for j in range(1, n + 1): + dp[j] = 99999 + + for i in range(1, m + 1): + for j in range(n + 1): + # choose case + if j >= coins[i - 1]: + dp[j] = min(dp[j], dp[j - coins[i - 1]] + 1) + + if dp[n] == 99999: + return -1 + return dp[n] diff --git a/LC322_DP_coin_change.py b/LC322_DP_coin_change.py new file mode 100644 index 00000000..f0812622 --- /dev/null +++ b/LC322_DP_coin_change.py @@ -0,0 +1,21 @@ +# Time Complexity : O(n) +# Space Complexity : O(n) +# Did this code successfully run on Leetcode : yes +# Any problem you faced while coding this : No + +# Approach: built a dp[i] as the minimum coins needed to make amount i, checking every coin for each amount + + +def rob(nums: list[int]) -> int: + n = len(nums) + if n == 1: + return nums[0] + prev = nums[0] + curr = max(nums[0], nums[1]) + + for i in range(2, n): + temp = curr + curr = max(temp, nums[i] + prev) + prev = temp + + return curr From ee1463dde2a7563f7343d90e4ed7663f5f1f5fda Mon Sep 17 00:00:00 2001 From: paragc05 Date: Mon, 17 Aug 2026 00:14:51 -0400 Subject: [PATCH 2/3] name correction --- LC198_DP_house_robber.py | 31 +++++++++++++------------------ LC322_DP_coin_change.py | 31 ++++++++++++++++++------------- Untitled | 1 + 3 files changed, 32 insertions(+), 31 deletions(-) create mode 100644 Untitled diff --git a/LC198_DP_house_robber.py b/LC198_DP_house_robber.py index 064b1dec..f0812622 100644 --- a/LC198_DP_house_robber.py +++ b/LC198_DP_house_robber.py @@ -1,26 +1,21 @@ # Time Complexity : O(n) -# Space Complexity : O(1) +# Space Complexity : O(n) # Did this code successfully run on Leetcode : yes # Any problem you faced while coding this : No -# Approach: at each house, choosing max(skip current, rob current + money from i-2) while keeping only the previous two DP values +# Approach: built a dp[i] as the minimum coins needed to make amount i, checking every coin for each amount -def coinChange(coins: list[int], amount: int) -> int: - m = len(coins) - n = amount - # m rows and n cols - dp = [0] * (n + 1) +def rob(nums: list[int]) -> int: + n = len(nums) + if n == 1: + return nums[0] + prev = nums[0] + curr = max(nums[0], nums[1]) - for j in range(1, n + 1): - dp[j] = 99999 + for i in range(2, n): + temp = curr + curr = max(temp, nums[i] + prev) + prev = temp - for i in range(1, m + 1): - for j in range(n + 1): - # choose case - if j >= coins[i - 1]: - dp[j] = min(dp[j], dp[j - coins[i - 1]] + 1) - - if dp[n] == 99999: - return -1 - return dp[n] + return curr diff --git a/LC322_DP_coin_change.py b/LC322_DP_coin_change.py index f0812622..064b1dec 100644 --- a/LC322_DP_coin_change.py +++ b/LC322_DP_coin_change.py @@ -1,21 +1,26 @@ # Time Complexity : O(n) -# Space Complexity : O(n) +# Space Complexity : O(1) # Did this code successfully run on Leetcode : yes # Any problem you faced while coding this : No -# Approach: built a dp[i] as the minimum coins needed to make amount i, checking every coin for each amount +# Approach: at each house, choosing max(skip current, rob current + money from i-2) while keeping only the previous two DP values -def rob(nums: list[int]) -> int: - n = len(nums) - if n == 1: - return nums[0] - prev = nums[0] - curr = max(nums[0], nums[1]) +def coinChange(coins: list[int], amount: int) -> int: + m = len(coins) + n = amount + # m rows and n cols + dp = [0] * (n + 1) - for i in range(2, n): - temp = curr - curr = max(temp, nums[i] + prev) - prev = temp + for j in range(1, n + 1): + dp[j] = 99999 - return curr + for i in range(1, m + 1): + for j in range(n + 1): + # choose case + if j >= coins[i - 1]: + dp[j] = min(dp[j], dp[j - coins[i - 1]] + 1) + + if dp[n] == 99999: + return -1 + return dp[n] diff --git a/Untitled b/Untitled new file mode 100644 index 00000000..bfd278d0 --- /dev/null +++ b/Untitled @@ -0,0 +1 @@ +LC322_DP_coin_change.py \ No newline at end of file From 8e506e82d39c3d21afd4342b9791202917b0ba87 Mon Sep 17 00:00:00 2001 From: paragc05 Date: Mon, 17 Aug 2026 00:15:23 -0400 Subject: [PATCH 3/3] Delete Untitled --- Untitled | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Untitled diff --git a/Untitled b/Untitled deleted file mode 100644 index bfd278d0..00000000 --- a/Untitled +++ /dev/null @@ -1 +0,0 @@ -LC322_DP_coin_change.py \ No newline at end of file