Easy

题目描述

给定四个整数 lengthwidthheightmass,分别表示盒子的长度、宽度、高度和质量,返回一个表示盒子类别的字符串。

盒子是 “Bulky” 的条件:

  • 盒子的任一尺寸大于或等于 10^4
  • 或者盒子的体积大于或等于 10^9

如果盒子的质量大于或等于 100,则它是 “Heavy”。

  • 如果盒子既是 “Bulky” 又是 “Heavy”,则其类别为 “Both”
  • 如果盒子既不是 “Bulky” 也不是 “Heavy”,则其类别为 “Neither”
  • 如果盒子是 “Bulky” 但不是 “Heavy”,则其类别为 “Bulky”
  • 如果盒子是 “Heavy” 但不是 “Bulky”,则其类别为 “Heavy”

注意,盒子的体积是其长度、宽度和高度的乘积。

示例 1:

输入: length = 1000, width = 35, height = 700, mass = 300
输出: "Heavy"
解释: 
盒子的任一尺寸都不大于或等于 10^4。
体积 = 24500000 <= 10^9。所以不能归类为 "Bulky"。
但是质量 >= 100,所以盒子是 "Heavy"。
因为盒子不是 "Bulky" 但是 "Heavy",所以返回 "Heavy"。

示例 2:

输入: length = 200, width = 50, height = 800, mass = 50
输出: "Neither"
解释: 
盒子的任一尺寸都不大于或等于 10^4。
体积 = 8 * 10^6 <= 10^9。所以不能归类为 "Bulky"。
质量也小于 100,所以也不能归类为 "Heavy"。
因为它既不属于上述两个类别,所以返回 "Neither"。

约束条件:

  • 1 <= length, width, height <= 10^5
  • 1 <= mass <= 10^3

解题思路

这道题的解题思路比较直观,需要按照给定的条件逐步判断盒子的类别。

首先分析题目条件:

  1. Bulky条件:任一维度 >= 10^4 或 体积 >= 10^9
  2. Heavy条件:质量 >= 100

解题步骤:

  1. 判断盒子是否为 Bulky:检查三个维度是否有任何一个 >= 10^4,或者计算体积是否 >= 10^9
  2. 判断盒子是否为 Heavy:检查质量是否 >= 100
  3. 根据两个布尔值的组合返回对应的字符串

需要注意的技术细节:

  • 计算体积时要考虑整数溢出问题,可以使用 long long 类型或先进行除法判断
  • 在 JavaScript 中,数值计算精度足够,无需特殊处理
  • 条件判断的逻辑要清晰,避免遗漏任何情况

这道题主要考查条件判断和逻辑思维,算法复杂度很低,重点是理清楚各种情况的组合。

代码实现

class Solution {
public:
    string categorizeBox(int length, int width, int height, int mass) {
        // 判断是否为 Bulky
        bool isBulky = (length >= 10000 || width >= 10000 || height >= 10000) ||
                       ((long long)length * width * height >= 1000000000LL);
        
        // 判断是否为 Heavy
        bool isHeavy = mass >= 100;
        
        // 根据两个条件返回相应的类别
        if (isBulky && isHeavy) {
            return "Both";
        } else if (isBulky) {
            return "Bulky";
        } else if (isHeavy) {
            return "Heavy";
        } else {
            return "Neither";
        }
    }
};
class Solution:
    def categorizeBox(self, length: int, width: int, height: int, mass: int) -> str:
        # 判断是否为 Bulky
        is_bulky = (length >= 10000 or width >= 10000 or height >= 10000) or \
                   (length * width * height >= 1000000000)
        
        # 判断是否为 Heavy
        is_heavy = mass >= 100
        
        # 根据两个条件返回相应的类别
        if is_bulky and is_heavy:
            return "Both"
        elif is_bulky:
            return "Bulky"
        elif is_heavy:
            return "Heavy"
        else:
            return "Neither"
public class Solution {
    public string CategorizeBox(int length, int width, int height, int mass) {
        // 判断是否为 Bulky
        bool isBulky = (length >= 10000 || width >= 10000 || height >= 10000) ||
                       ((long)length * width * height >= 1000000000L);
        
        // 判断是否为 Heavy
        bool isHeavy = mass >= 100;
        
        // 根据两个条件返回相应的类别
        if (isBulky && isHeavy) {
            return "Both";
        } else if (isBulky) {
            return "Bulky";
        } else if (isHeavy) {
            return "Heavy";
        } else {
            return "Neither";
        }
    }
}
var categorizeBox = function(length, width, height, mass) {
    // 判断是否为 Bulky
    const isBulky = (length >= 10000 || width >= 10000 || height >= 10000) ||
                    (length * width * height >= 1000000000);
    
    // 判断是否为 Heavy
    const isHeavy = mass >= 100;
    
    // 根据两个条件返回相应的类别
    if (isBulky && isHeavy) {
        return "Both";
    } else if (isBulky) {
        return "Bulky";
    } else if (isHeavy) {
        return "Heavy";
    } else {
        return "Neither";
    }
};

复杂度分析

复杂度类型
时间复杂度O(1)
空间复杂度O(1)

算法只需要进行常数次的条件判断和算术运算,无论输入规模如何,时间和空间消耗都是常数级别的。

相关题目