leetcode-213. 打家劫舍 II

原始思路

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public int rob(int[] nums) {
int n = nums.length;
int[][][] dp = new int[n+1][2][2];
dp[1][0][0] = 0;
dp[1][1][1] = nums[0];
for(int i = 2; i <= n; i++){
//第一家房子没有被抢
if(i == 2){
dp[i][0][0] = dp[i-1][0][0];
}else{
dp[i][0][0] = Math.max(dp[i-1][0][0],dp[i-1][1][0]);
}
dp[i][1][0] = dp[i-1][0][0] + nums[i-1];

// 第一件房子被抢了
if(i == n){
dp[i][0][1] = Math.max(dp[i-1][0][1],dp[i-1][1][1]);
}else{
dp[i][0][1] = Math.max(dp[i-1][0][1],dp[i-1][1][1]);
dp[i][1][1] = dp[i-1][0][1] + nums[i-1];
}
}

int result1 = Math.max(dp[n][0][0], dp[n][1][0]);
int result2 = Math.max(dp[n][0][1], dp[n][1][1]);
return Math.max(result1, result2);
}
}