首页 > 技术文章 > Leetcode练习(Python):动态规划类:第198题:打家劫舍:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

zhuozige 2020-05-12 15:08 原文

题目:

打家劫舍:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。  给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。  

思路:

使用动态规划的框架。

程序:

class Solution:
    def rob(self, nums: List[int]) -> int:
        if not nums:
            return 0
        length = len(nums)
        if length == 1:
            return nums[0]
        if length == 2:
            return max(nums[0], nums[1])
        auxiliary = [-1] * (length + 1)
        auxiliary[0] = 0
        auxiliary[1] = nums[0]
        for index in range(1, length):
            auxiliary[index + 1] = max(auxiliary[index], auxiliary[index - 1] + nums[index])
        return auxiliary[-1]

  

推荐阅读