public int rob(int[] nums) {
if (nums == null || nums.length == 0) {
return0;
}
int[] dp = new int[nums.length];
dp[nums.length - 1] = nums[nums.length - 1];
for (int i = nums.length - 2; i >= 0; --i) {
intmax = 0;
for (int j = i; j < nums.length; ++j) {
max = Math.max(max, nums[j] + (j + 2 < nums.length ? dp[j + 2] : 0));
}
dp[i] = max;
}
return dp[0];
}
状态定义2
public int rob(int[] nums) {
if (nums == null || nums.length == 0) {
return0;
}
if (nums.length == 1) {
return nums[0];
}
int[] dp = new int[nums.length];
dp[0] = nums[0];
dp[1] = Math.max(nums[0], nums[1]);
for (int i = 2; i < nums.length; ++i) {
dp[i] = Math.max(dp[i - 1], nums[i] + dp[i - 2]);
}
return dp[nums.length - 1];
}
状态定义2空间优化
public int rob(int[] nums) {
if (nums == null || nums.length == 0) {
return0;
}
if (nums.length == 1) {
return nums[0];
}
int pre = nums[0];
int cur = Math.max(nums[0], nums[1]);
for (int i = 2; i < nums.length; ++i) {
int temp = cur;
cur = Math.max(cur, nums[i] + pre);
pre = temp;
}
return cur;
}