่ทhouse robber i ๆฒกๆไปปไฝๅบๅซๅ
ถๅฎ๏ผๅ
ณ้ฎๅจไบrob 0-n-2็house๏ผๆ่
rob 1-n-1็house๏ผๅ ไธบ0ๅn-1ไธ่ฝไธ่ตทrob
class Solution {
public int rob(int[] nums) {
if (nums.length == 1) {
return nums[0];
}
if (nums.length == 2) {
return Math.max(nums[0], nums[1]);
}
return Math.max(rob(nums, 0, nums.length-2), rob(nums, 1, nums.length-1));
}
// robๅฏไปฅ็จO(n)ๅ็ๅข
private int rob(int[] nums, int start, int end) {
if (end == start + 1) {
return Math.max(nums[start], nums[end]);
}
int[] dp = new int[end-start+1];
dp[0] = nums[start];
dp[1] = nums[start+1];
int max = Math.max(dp[0],dp[1]);
for (int i = start+2; i <= end; i++) {
int idx = i - start;
for (int j = idx - 2; j >= 0; j--) {
dp[idx] = Math.max(dp[idx], nums[i] + dp[j]);
}
max = Math.max(max, dp[idx]);
}
return max;
}
}