方法一:动态规划+数组
class Solution { public int rob(int[] nums) { if(nums==null||nums.length==0){ return 0; } int[] dp=new int[nums.length+1]; dp[0]=0; dp[1]=nums[0]; for(int i=2;i<=nums.length;i++){ dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i-1]); } return dp[nums.length]; } }
方法二:动态规划+动态数组
class Solution { public int rob(int[] nums) { if(nums==null||nums.length==0){ return 0; } int[] dp=new int[3]; dp[0]=0; dp[1]=nums[0]; for(int i=2;i<=nums.length;i++){ dp[i%3]=Math.max(dp[(i-1)%3],dp[(i-2)%3]+nums[(i-1)]); } return dp[nums.length%3]; } }