zoukankan      html  css  js  c++  java
  • 213打家劫舍II

    题目:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
    给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。
    链接:https://leetcode-cn.com/problems/house-robber-ii

    法一:官方代码

    思路:从直线数组变成环状数组最大的区别是首尾数字不能同时取,所以抓住问题的主要矛盾,分两类进行计算,一类是不取第一个数,另一类是不取最后一个数,

    class Solution:
        def rob(self, nums: [int]) -> int:
            def my_rob(nums):
                cur, pre = 0, 0
                for num in nums:
                    # 右边的第二个cur是到num[i-1]的最大值,所以要赋值给pre,因为下一个循环时cru就是pre了
                    cur, pre = max(pre + num, cur), cur
                return cur
            return max(my_rob(nums[:-1]),my_rob(nums[1:])) if len(nums) != 1 else nums[0]
    if __name__ == '__main__':
        duixaing = Solution()
        a = duixaing.rob([2,3,2])
        print(a)
    View Code

    ttt

  • 相关阅读:
    淘宝放大镜
    碰撞的小球
    模拟微博发布
    CSS兼容IE Firefox问题与解决方法
    太阳八大行星运行轨迹
    Canvas标签基础
    offsetTop、clientTop、scrollTop、offsetTop
    js绘制圆形时钟
    js时钟
    js五星好评2
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12307935.html
Copyright © 2011-2022 走看看