the problem的整个想法是您不能抢劫连续的房屋。
因此,此解决方案有效并且基于考虑偶数房屋或奇数房屋(在每种情况下都会跳过房屋)的思想:
public int rob(int[] nums) {
int robEven = 0, robOdd = 0;
for (int i = 0; i < nums.length; i++) {
if ( i % 2 == 0) { // even
robEven = Math.max(robEven + nums[i], robOdd);
} else {
robOdd = Math.max(robOdd + nums[i], robEven);
}
}
return Math.max(robEven, robOdd);
}
但是,我的问题是关于Math.max
的计算:
robEven = Math.max(robEven + nums[i], robOdd);
在偶数情况下,为什么您不能考虑奇数情况,因为您不能从奇数房子转到偶数房子,因为它们会在隔壁?
我认为解决方案是这样的:
public int rob(int[] nums) {
int robEven = 0, robOdd = 0;
for (int i = 0; i < nums.length; i++) {
if ( i % 2 == 0) { // even
robEven = Math.max(robEven + nums[i], robEven);
} else {
robOdd = Math.max(robOdd + nums[i], robOdd);
}
}
return Math.max(robEven, robOdd);
}
但这不起作用。