package code; import java.util.Arrays; /* * 213. House Robber II * é¢æï¼æ°ç»æå¤§åï¼ä¸è½éåç¸é»ç两个æ°ãæ°ç»é¦å°¾æ¯è¿çç * é¾åº¦ï¼Medium * åç±»ï¼Dynamic Programming * æè·¯ï¼åå«æç¬¬ä¸ä¸ªå ç´ ç½®0åæåä¸ä¸ªå ç´ ç½®0ï¼ç¨lc198çè§£æ³ * * Tipsï¼lc198 */ public class lc213 { public int rob(int[] nums) { //åå«æç¬¬ä¸ä¸ªå ç´ ç½®0åæåä¸ä¸ªå ç´ ç½®0ï¼ç¨lc198çè§£æ³ if(nums.length == 0) return 0; if(nums.length == 1) return nums[0]; int res1 = helper(Arrays.copyOf(nums, nums.length-1)); nums[0] = 0; int res2 = helper(nums); return Math.max(res1, res2); } public int helper(int[] nums) { if(nums.length == 0) return 0; 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-2] + nums[i]),dp[i-1]); //dp[i] 表示以 0~i çæ°ç»çç»æ } return dp[nums.length-1]; } }