classSolution: defrob(self, nums: List[int]) -> int: # 在 198. 打家劫舍 基础上,把线性变成了环。 # “环问题”:分情况考虑可以变为 “线性问题”; # a b c d e f # --------- 情况一:考虑范围不包括尾节点; # a b c d e f # --------- 情况二:考虑范围不包括头节点。 # 两种线性情况中的最大值,就是环形情况的最大值。 # 我们可以直接把 198. 打家劫舍 封装为一个方法,两种情况调用取最大值即可。 deffunc_inner(nums: List[int]) -> int: d = [0for _ inrange(len(nums))] iflen(nums)==1: return nums[0] eliflen(nums)==2: returnmax(nums[0],nums[1]) d[0],d[1] = nums[0],max(nums[0],nums[1]) for i inrange(2,len(nums)): d[i] = max(d[i-2]+nums[i],d[i-1]) # print(d) return d[len(nums)-1] iflen(nums)==1: return nums[0] nums1,nums2 = nums[:-1],nums[1:] returnmax(func_inner(nums1),func_inner(nums2))