题目:
意思是房子们排成一个圈,还是不能同时打劫相邻的两个房子。
思路:
与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)