[LeetCode]House Robber II
思路和House Robber很像,唯一不同在于当从0开始算的时候,最后的一个房间是一定不可以抢的,所以我们分别算从0和从1开始的,取其中最大值
public class Solution {
public int rob(int[] nums) {
int length = nums.length;
if (length == 0) {
return length;
} else if (length == 1) {
return nums[0];
}
if (length == 2) {
return helper(nums, 0);
}
return Math.max(helper(nums, 0), helper(nums, 1));
}
public int helper(int[] nums, int start) {
int length = nums.length;
int[] record = new int[length];
record[start] = nums[start];
record[start + 1] = nums[start + 1];
int result = Math.max(record[start], record[start + 1]);
for (int i = start + 2; i < length; i++) {
if (i == length - 1 && start == 0) {
break;
}
int tmp1 = record[i - 2];
int tmp2 = i > 2 ? record[i - 3] : 0;
record[i] = nums[i] + Math.max(tmp1, tmp2);
result = Math.max(record[i], result);
}
return result;
}
}

浙公网安备 33010602011771号