from typing import List
classSolution:defrob(self, nums: List[int])->int:
n =len(nums)if n ==0:return0if n <=2:returnmax(nums)returnmax(self.get_max_money(nums[1:]), self.get_max_money(nums[:-1]))defget_max_money(self, nums: List[int])->int:
dp =[0]*len(nums)
dp[0]= nums[0]
dp[1]=max(nums[0], nums[1])for i inrange(2,len(nums)):
dp[i]=max(dp[i -1], dp[i -2]+ nums[i])return dp[-1]if __name__ =="__main__":
s = Solution()
a = s.rob([1])print(a)
2.2 解法2
from typing import List
classSolution:defrob(self, nums: List[int])->int:
count =len(nums)if count ==0:return0if count ==1:return nums[0]
dp1 = self.helper(nums[:-1])
dp2 = self.helper(nums[1:])returnmax(dp1, dp2)defhelper(self, nums: List[int])->int:
count =len(nums)if count ==0:return0
dp =[0]*(count +1)
dp[-2]= nums[-1]for i inrange(count -2,-1,-1):
dp[i]=max(dp[i +1], dp[i +2]+ nums[i])return dp[0]if __name__ =="__main__":
s = Solution()
a = s.rob([1])print(a)