Medium
House Robber
👶 The 5-Year-Old Summary
Rob houses in a line! Can't rob two adjacent houses or alarm goes off! [2,7,9,3,1] → rob 1($2)+3($9)+5($1)=12, skip 2($7) and 4($3)!
🎮 Interactive Visualizer
Houses: [2, 7, 9, 3, 1]
🧠The Brain Hack
dp[i] = max(dp[i-1], dp[i-2] + nums[i])! Either skip current house (keep dp[i-1]) OR rob it (add to dp[i-2])!
💻 The Clean Solution
def rob(nums):
if not nums: return 0
if len(nums) == 1: return nums[0]
# dp[i] = max money robbing up to house i
dp = [0] * len(nums)
dp[0] = nums[0]
dp[1] = max(nums[0], nums[1])
for i in range(2, len(nums)):
# Skip this house OR rob it
dp[i] = max(dp[i-1], dp[i-2] + nums[i])
return dp[-1]
# [2,7,9,3,1] → 12
Time: O(n)
Space: O(1) optimized