剑指 Offer II 090. 环形房屋偷盗

  1. 将问题转换为持家劫舍一就好做了。具体过程是对于首尾偷与不偷我们得分开讨论。如果首家被偷,那么末尾的家必不能偷,问题就转变成偷 [0, i - 1] 家,同理也将问题转换为偷 [1, i] 家。 ```java class Solution { public int rob(int[] nums) {
    1. if (nums == null || nums.length == 0) return 0;
    2. if (nums.length == 1) return nums[0];
    3. int len = nums.length - 1;
    4. int includeZero = robHouse(nums, 0, len - 1);
    5. int excludeZero = robHouse(nums, 1, len);
    return Math.max(includeZero, excludeZero);
}

// 左闭右闭
private int robHouse(int[] nums, int start, int end) {
    int len = nums.length;
    int prev = 0, cur = 0, temp;
    for (int i = start; i <= end; i++) {
        temp = cur;
        cur = Math.max(prev + nums[i], cur);
        prev = temp;
    }

    return cur;
}

} ```