力扣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 }
浙公网安备 33010602011771号