File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change 1+ '''
2+ # Leetcode 198. House Robber
3+
4+ use **dynamic programming** to solve this problem. (bottom-up approach) 🧩
5+
6+ choose bottom-up approach for less space complexity.
7+
8+ ## DP relation
9+
10+ ```
11+ dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])
12+ ```
13+
14+ - **dp[i - 1]:** skip and take the value from the previous house
15+ - **dp[i - 2]:** rob the current house, add its value to the maximum money from two houses before
16+
17+ ## Time and Space Complexity
18+
19+ ```
20+ TC: O(n)
21+ SC: O(n)
22+ ```
23+
24+ ### TC is O(n):
25+ - iterating through the list just once to calculate the maximum money. = O(n)
26+
27+ ### SC is O(n):
28+ - using a list to store the maximum money at each house. = O(n)
29+
30+ '''
31+
32+ class Solution :
33+ def rob (self , nums : List [int ]) -> int :
34+ if len (nums ) == 1 :
35+ return nums [0 ]
36+
37+ dp = [0 ] * len (nums )
38+ dp [0 ] = nums [0 ]
39+ dp [1 ] = max (nums [0 ], nums [1 ])
40+
41+ for i in range (2 , len (nums )):
42+ dp [i ] = max (dp [i - 1 ], dp [i - 2 ] + nums [i ])
43+
44+ return dp [- 1 ]
You can’t perform that action at this time.
0 commit comments