• LeetCode 2525. 根据规则将箱子分类:优雅解法?


    【LetMeFly】2525.根据规则将箱子分类:优雅解法?

    力扣题目链接:https://leetcode.cn/problems/categorize-box-according-to-criteria/

    给你四个整数 length ,width ,height 和 mass ,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子 类别 的字符串。

    • 如果满足以下条件,那么箱子是 "Bulky" 的:
      • 箱子 至少有一个 维度大于等于 104 。
      • 或者箱子的 体积 大于等于 109 。
    • 如果箱子的质量大于等于 100 ,那么箱子是 "Heavy" 的。
    • 如果箱子同时是 "Bulky" 和 "Heavy" ,那么返回类别为 "Both" 。
    • 如果箱子既不是 "Bulky" ,也不是 "Heavy" ,那么返回类别为 "Neither" 。
    • 如果箱子是 "Bulky" 但不是 "Heavy" ,那么返回类别为 "Bulky" 。
    • 如果箱子是 "Heavy" 但不是 "Bulky" ,那么返回类别为 "Heavy" 。
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

    注意,箱子的体积等于箱子的长度、宽度和高度的乘积。

     

    示例 1:

    输入:length = 1000, width = 35, height = 700, mass = 300
    输出:"Heavy"
    解释:
    箱子没有任何维度大于等于 104 。
    体积为 24500000 <= 109 。所以不能归类为 "Bulky" 。
    但是质量 >= 100 ,所以箱子是 "Heavy" 的。
    由于箱子不是 "Bulky" 但是是 "Heavy" ,所以我们返回 "Heavy" 。

    示例 2:

    输入:length = 200, width = 50, height = 800, mass = 50
    输出:"Neither"
    解释:
    箱子没有任何维度大于等于 104 。
    体积为 8 * 106 <= 109 。所以不能归类为 "Bulky" 。
    质量小于 100 ,所以不能归类为 "Heavy" 。
    由于不属于上述两者任何一类,所以我们返回 "Neither" 。

     

    提示:

    • 1 <= length, width, height <= 105
    • 1 <= mass <= 103

    方法一:优雅解法?

    判断箱子是否符合bulkyheavy很简单,对于一些编程语言注意不要“32位整数溢出”就可以了。

    得到了值为01的两个变量bulkyheavy,怎么“优雅”地转为字符串返回呢?

    可以预先定义一个字符串数组dic = ['Neither', 'Heavy', 'Bulky', 'Both'],这样直接返回dic[bulky * 2 + heavy]就可以了。本质上是将这两个变量看成了dic下标二进制下的低两位,这样就避免了四个if-else的出现。

    • 时间复杂度 O ( 1 ) O(1) O(1)
    • 空间复杂度 O ( 1 ) O(1) O(1)

    AC代码

    C++
    const string dict[4] = {"Neither", "Heavy", "Bulky", "Both"};
    
    typedef long long ll;
    class Solution {
    public:
        string categorizeBox(ll length, ll width, ll height, ll mass) {
            bool bulky = length >= 10000 || width >= 10000 || height >= 10000 || length * width * height >= 1000000000;
            bool heavy = mass >= 100;
            return dict[bulky * 2 + heavy];
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    Python
    dic = ['Neither', 'Heavy', 'Bulky', 'Both']
    class Solution:
        def categorizeBox(self, length: int, width: int, height: int, mass: int) -> str:
            bulky = length >= 10000 or width >= 10000 or height >= 10000 or length * width * height >= 1000000000
            heavy = mass >= 100
            return dic[bulky * 2 + heavy]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
    Tisfy:https://letmefly.blog.csdn.net/article/details/133943695

  • 相关阅读:
    AcWing 899. 编辑距离 线性dp
    基于SqlSugar的开发框架循序渐进介绍(21)-- 在工作流列表页面中增加一些转义信息的输出,在后端进行内容转换
    我的Vue之旅 11 Vuex 实现购物车
    SQL拼接动态创建表A关联数据库表B查询(数据分区储存)
    Sklearn基本算法
    nginx 编译使用 nginx_upstream_check_module
    原生js 多用途三元表达式 点赞按钮
    ExecutorService、Callable、Future实现有返回结果的多线程原理解析
    GET清求 不能传 @RequestBody 吗, (不支持POST请求方法,支持以下GET)
    图像处理 OpenCV简介
  • 原文地址:https://blog.csdn.net/Tisfy/article/details/133943695