选了第一家, 则问题退化成求[2, n-1)范围的最大值, 不选第一家, 则问题退化成求[1, n)范围的最大值 @param nums @return

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
/**
* 选了第一家, 则问题退化成求[2, n-1)范围的最大值,
* 不选第一家, 则问题退化成求[1, n)范围的最大值
* @param nums
* @return
*/
public int rob(int[] nums) {
int len = nums.length;
return Math.max(
nums[0] + rob1(nums, 2, len-1),
rob1(nums, 1, len));
}

private int rob1(int[] nums, int start, int end) {
int f0 = 0, f1 = 0;
for (int i = start; i < end; i++) {
int newF = Math.max(f0+nums[i], f1);
f0 = f1;
f1 = Math.max(f1, newF);
}
return Math.max(f0, f1);
}
}

Comments