力扣213. 打家劫舍 II

 

记录一下自己思路,核心问题在于两种情况,一个是从0到n - 1进行DP,第二条路径是1到n进行DP,然后比较大小,不要试图检查路径中是否包含第0家,因为可以空一个,也可以空两个,根本没法追踪。。。

题目:【https://leetcode.cn/problems/house-robber-ii/description/

 

 1 #define max(a, b) ((a) < (b) ? (b) : (a))
 2 
 3 int __rob(int* nums, int numsSize) {
 4     if (numsSize < 2)
 5         return nums[0];
 6 
 7     int a, b, c;
 8     a = nums[0];
 9     b = max(nums[0], nums[1]);
10     for (int i = 2; i < numsSize; ++i) {
11         c = max(b, a + nums[i]);
12         a = b;
13         b = c;
14     }
15     return 2 == numsSize ? b : c;
16 }
17 
18 int rob(int* nums, int numsSize) {
19     if (numsSize < 2)
20         return nums[0];
21     return max(__rob(nums, numsSize - 1), __rob(nums + 1, numsSize - 1));
22 }

 

posted @ 2025-04-11 15:21  J&YANG  阅读(13)  评论(0)    收藏  举报