LeetCode No.213 House Robber II

题目:

意思是房子们排成一个圈,还是不能同时打劫相邻的两个房子。

思路:

与No.198类似,依然有打劫和不打劫两种情况的判断。


对于首尾相邻的两间房子有3种情况需要考虑:①首打劫,尾不打劫;②首不打劫,尾打劫;③首尾都不打劫。

所以可以通过No.198的算法做两遍来完成这题。第一遍,遍历头不遍历尾,即尾一定不打劫,首打不打劫交给算法。第二遍遍历尾不遍历头,即头一定不打劫,尾打不打劫交给算法。最后再取两个结果中较大的一个。

代码:

class Solution:
    def rob(self, nums):
        if len(nums) <= 1:
            return sum(nums)
        noRob,Rob = 0,0
        for num in nums[:-1]:
            noRob,Rob = max(noRob,Rob),noRob+num
        result1=max(noRob,Rob)
        noRob,Rob = 0,0
        for num in nums[1:]:
            noRob,Rob = max(noRob,Rob),noRob+num
        result2=max(noRob,Rob)
        return max(result1,result2)

结果:

猜你喜欢

转载自blog.csdn.net/qq_39178023/article/details/80156189
今日推荐