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

  • 相关阅读:
    java-初始化和清理
    java-字符串
    java-I/O流
    java-反射和代理
    java-执行流程控制语句
    java-访问控制修饰符
    java-异常
    java-注解
    [ Java学习 ] 一道Java好题的详细题解 001
    [ Java学习 ] 查阅资料整理 002
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12307935.html
Copyright © 2011-2022 走看看