题目
LeetCode 198
思路分析
首先我们考虑到的算法应该是'动态规划',每一间的金额都不一样,且不能同时抢劫相邻间,首先状态为:当前走到的房间号,选择为:抢劫当前的房间或抢劫当前房间对应的下一个房间。
class Solution {
public int rob(int[] nums) {
int[] data = new int[nums.length + 2];
data[nums.length] = data[nums.length + 1] = 0;//没房子了
for(int i = nums.length - 1; i >= 0; i--)
data[i] = Math.max(data[i + 1], nums[i] + data[i + 2]);
return data[0];
}
}
进行状态压缩后
class Solution {
public int rob(int[] nums) {
int one, second;
one = second = 0;
//没房子了
for(int i = nums.length - 1; i >= 0; i--){
int temp = Math.max(one, nums[i] + second);
second = one;
one = temp;
}
return one;
}
}