198. House Robber
Tags:
Medium
Skills:
DP
June 24, 2025
04:32 AM
No headings found
Loading content...
Related Posts
Leetcode
No headings found
Related Posts
Leetcode
Problem
Bài toán yêu cầu: Cho một mảng số nguyên nums, mỗi phần tử đại diện cho số tiền ở mỗi căn nhà. Bạn không được trộm hai căn nhà liền kề. Hãy trả về tổng số tiền lớn nhất có thể trộm được mà không báo động cảnh sát
Phân tích
Công thức DP

Solution - DP
1function rob(nums: number[]): number {
2 if (nums.length === 0) return 0
3 if (nums.length === 1) return nums[0];
4
5 const dp: number[] = [];
6 dp[0] = nums[0];
7 dp[1] = Math.max(nums[0], nums[1]);
8
9 for (let i = 2; i < nums.length; i++) {
10 dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
11 }
12 return dp[nums.length - 1]
13};Ở mỗi bước bạn chỉ cần chọn phương án tốt nhất giữa hai lựa chọn này
Solution - Optimize
1function rob(nums: number[]): number {
2 let prev1 = 0 // dp[i - 1]
3 let prev2 = 0 // dp[i - 2]
4 for(const num of nums) {
5 const temp = prev1;
6 prev1 = Math.max(prev1, prev2 + num);
7 prev2 = temp;
8 }
9 return prev1
10};