动态规划----3.打家劫舍
198. 打家劫舍 - 力扣(LeetCode)
/**
maxRob[]: 记录结果,maxRob[i],代表偷到第i+1个房间能偷到的最大值
只能间隔一个房间再偷(从0开始计算)
偷到第0个房间: maxRob[0]: nums[0] (只有一个可偷)
偷到第1个房间: maxRob[1]: Math.max(nums[0],nums[1]) (不能连着偷两个,必然是前两个中最大的) 要么偷0,要么偷1,偷最大的那个
偷到第2个房间: maxRob[2]: Math.max(maxRob[0] + nums[2],maxRob[1]) 前两个房间中 若偷0,则maxRob[0] + nums[2](偷0可偷2) 若偷1,则maxRob[1](偷1不可偷2)
偷到第3个房间: maxRob[3]: Math.max(maxRob[1] + nums[3],maxRob[2]) 前两个房间中 若偷1,则maxRob[1] + nums[3](偷1可偷3) 若偷2,则maxRob[2](偷2不可偷3)
...........
偷到第i个房间 maxRob[i]: Math.max(maxRob[i - 2] + nums[i],maxRob[i - 1]) 若偷i - 2,则maxRob[i - 2] + nums[i](偷i - 2可偷i) 若偷i - 1,则maxRob[i - 1](偷i - 1不可偷i)
*/
class Solution {/**maxRob[]: 记录结果,maxRob[i],代表偷到第i+1个房间能偷到的最大值只能间隔一个房间再偷(从0开始计算)偷到第0个房间: maxRob[0]: nums[0] (只有一个可偷)偷到第1个房间: maxRob[1]: Math.max(nums[0],nums[1]) (不能连着偷两个,必然是前两个中最大的) 要么偷0,要么偷1,偷最大的那个偷到第2个房间: maxRob[2]: Math.max(maxRob[0] + nums[2],maxRob[1]) 前两个房间中 若偷0,则maxRob[0] + nums[2](偷0可偷2) 若偷1,则maxRob[1](偷1不可偷2)偷到第3个房间: maxRob[3]: Math.max(maxRob[1] + nums[3],maxRob[2]) 前两个房间中 若偷1,则maxRob[1] + nums[3](偷1可偷3) 若偷2,则maxRob[2](偷2不可偷3)...........偷到第i个房间 maxRob[i]: Math.max(maxRob[i - 2] + nums[i],maxRob[i - 1]) 若偷i - 2,则maxRob[i - 2] + nums[i](偷i - 2可偷i) 若偷i - 1,则maxRob[i - 1](偷i - 1不可偷i)*/public int rob(int[] nums) {int len = nums.length;int[] dp = new int[len];if(len == 1) {return nums[0];}//初始化dp[0] = nums[0];dp[1] = Math.max(nums[0], nums[1]);//开始递推for(int i = 2; i < len; i++) {dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);}return dp[len - 1];}
}