From 72d84c11def25ccf900c14c2e7ee5738f0fc0cd5 Mon Sep 17 00:00:00 2001 From: prenastro Date: Mon, 6 Jul 2026 03:29:40 -0700 Subject: [PATCH] S30 DP-2 Completed --- coinchange2.py | 16 ++++++++++++++++ painthouse.py | 22 ++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 coinchange2.py create mode 100644 painthouse.py diff --git a/coinchange2.py b/coinchange2.py new file mode 100644 index 00000000..8373b44a --- /dev/null +++ b/coinchange2.py @@ -0,0 +1,16 @@ +class Solution: + def change(self, amount: int, coins: List[int]) -> int: + m = len(coins) + n = amount + + dp = [0] * (n + 1) + dp[0] = 1 + + for i in range(1, m + 1): + for j in range(coins[i - 1], n + 1): + dp[j] += dp[j - coins[i - 1]] + + return dp[n] + + # TC - O(m*n) + # SC - O(n) \ No newline at end of file diff --git a/painthouse.py b/painthouse.py new file mode 100644 index 00000000..30765d00 --- /dev/null +++ b/painthouse.py @@ -0,0 +1,22 @@ +class Solution: + def minCost(self, costs): + m = len(costs) + n = len(costs[0]) + + colorR = costs[m-1][0] + colorB = costs[m-1][1] + colorG = costs[m-1][2] + + for i in range(m-2, -1, -1): + tempR = colorR + tempB = colorB + + colorR = costs[i][0] + min(colorB, colorG) + colorB = costs[i][1] + min(tempR, colorG) + colorG = costs[i][2] + min(tempR, tempB) + + return min(colorR, colorB, colorG) + + + # TC - O(n) + # SC - O(1) because 2 pointers approach, if we use DP it will be O(n) \ No newline at end of file