Skip to content

Commit 2ed320b

Browse files
authored
Create House Robber - Leetcode 198.py
1 parent 27cfff9 commit 2ed320b

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

House Robber - Leetcode 198.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# Recursive Solution
2+
class Solution:
3+
def rob(self, nums: List[int]) -> int:
4+
n = len(nums)
5+
6+
def helper(i):
7+
if i == 0:
8+
return nums[0]
9+
if i == 1:
10+
return max(nums[0], nums[1])
11+
12+
return max(nums[i] + helper(i-2),
13+
helper(i-1))
14+
15+
return helper(n-1)
16+
# Time: O(2^n)
17+
# Space: O(n)
18+
19+
20+
# Top Down DP (Memoization)
21+
class Solution:
22+
def rob(self, nums: List[int]) -> int:
23+
n = len(nums)
24+
if n == 1:
25+
return nums[0]
26+
if n == 2:
27+
return max(nums[0], nums[1])
28+
29+
memo = {0:nums[0], 1:max(nums[0], nums[1])}
30+
31+
def helper(i):
32+
if i in memo:
33+
return memo[i]
34+
else:
35+
memo[i] = max(nums[i] + helper(i-2),
36+
helper(i-1))
37+
return memo[i]
38+
39+
return helper(n-1)
40+
# Time: O(n)
41+
# Space: O(n)
42+
43+
44+
45+
# Bottom Up DP (Tabulation)
46+
class Solution:
47+
def rob(self, nums: List[int]) -> int:
48+
n = len(nums)
49+
if n == 1:
50+
return nums[0]
51+
if n == 2:
52+
return max(nums[0], nums[1])
53+
54+
dp = [0] * n
55+
dp[0] = nums[0]
56+
dp[1] = max(nums[0], nums[1])
57+
for i in range(2, n):
58+
dp[i] = max(nums[i] + dp[i-2], dp[i-1])
59+
60+
return dp[n-1]
61+
# Time: O(n)
62+
# Space: O(n)
63+
64+
65+
# Bottom Up DP (Constant Space)
66+
class Solution:
67+
def rob(self, nums: List[int]) -> int:
68+
n = len(nums)
69+
if n == 1:
70+
return nums[0]
71+
if n == 2:
72+
return max(nums[0], nums[1])
73+
74+
prev = nums[0]
75+
curr = max(nums[0], nums[1])
76+
for i in range(2, n):
77+
prev, curr = curr, max(nums[i] + prev, curr)
78+
79+
return curr
80+
# Time: O(n)
81+
# Space: O(1)

0 commit comments

Comments
 (0)