House Robber 2




質問する

  • house強盗とかの質問
  • 最後の家と最初の家は隣人です

    に答える

  • 1号で始まり、n-1号で終わり、
  • 0号で始まり、n-2号で終わり、
  • class Solution:
        def rob(self, nums: List[int]) -> int:
            if len(nums)>1:
                fromFirst = robbing(nums[:-1])
                toLast = robbing(nums[1:])
    
                return max(fromFirst, toLast)
            return nums[0]
            
            
    def robbing(nums: List[int]) -> int:
        N = len(nums)
        if N > 1:
            dp = [[0,0] for _ in range(N)]
            dp[0][0] = nums[0]
            dp[1][1] = nums[0]
            dp[1][0] = nums[1]
    
            for i in range(2, N):
                dp[i][0] = max(dp[i-2]) + nums[i]
                dp[i][1] = dp[i-1][0]
    
            return max(dp[-1])
        else:
            return max(nums)

    結果