Leetcode213 打劫家舍2

Leetcode213 打劫家舍2_第1张图片

思路:既然头尾不能同时取,那就分别算只取头或者只取尾,不考虑特殊情况的话是一个简单的动态规划

class Solution:
    def rob(self, nums: list[int]) -> int:
        if len(nums) <= 3:
            return max(nums)
        max_sum = [nums[0], max(nums[1], nums[0])]
        for i in range(2, len(nums)-1):
            max_sum.append(max(max_sum[i - 2] + nums[i], max_sum[i - 1]))
        sum1=max_sum[-1]

        nums.pop(0)
        max_sum = [nums[0], max(nums[1], nums[0])]
        for i in range(2, len(nums)):
            max_sum.append(max(max_sum[i - 2] + nums[i], max_sum[i - 1]))
        sum2=max_sum[-1]
        print(sum1,sum2)
        return max(sum1,sum2)

你可能感兴趣的:(Leetcode中等题,python,leetcode)