2525.根据规则将箱子分类

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

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

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

  • 如果满足以下条件,那么箱子是 "Bulky" 的:
    <ul>
        <li>箱子 <strong>至少有一个</strong> 维度大于等于 <code>10<sup>4</sup></code>&nbsp;。</li>
        <li>或者箱子的 <strong>体积</strong> 大于等于&nbsp;<code>10<sup>9</sup></code>&nbsp;。</li>
    </ul>
    </li>
    <li>如果箱子的质量大于等于&nbsp;<code>100</code>&nbsp;,那么箱子是&nbsp;<code>"Heavy"</code>&nbsp;的。</li>
    <li>如果箱子同时是&nbsp;<code>"Bulky"</code> 和&nbsp;<code>"Heavy"</code>&nbsp;,那么返回类别为&nbsp;<code>"Both"</code>&nbsp;。</li>
    <li>如果箱子既不是&nbsp;<code>"Bulky"</code>&nbsp;,也不是&nbsp;<code>"Heavy"</code>&nbsp;,那么返回类别为&nbsp;<code>"Neither"</code>&nbsp;。</li>
    <li>如果箱子是&nbsp;<code>"Bulky"</code>&nbsp;但不是&nbsp;<code>"Heavy"</code>&nbsp;,那么返回类别为&nbsp;<code>"Bulky"</code>&nbsp;。</li>
    <li>如果箱子是&nbsp;<code>"Heavy"</code>&nbsp;但不是&nbsp;<code>"Bulky"</code>&nbsp;,那么返回类别为&nbsp;<code>"Heavy"</code>&nbsp;。</li>
    

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

 

示例 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)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
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];
}
};

Python

1
2
3
4
5
6
7
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]

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


2525.根据规则将箱子分类
https://blog.letmefly.xyz/2023/10/20/LeetCode 2525.根据规则将箱子分类/
作者
Tisfy
发布于
2023年10月20日
许可协议