Easy
题目描述
给定四个整数 length、width、height 和 mass,分别表示盒子的长度、宽度、高度和质量,返回一个表示盒子类别的字符串。
盒子是 “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
解题思路
这道题的解题思路比较直观,需要按照给定的条件逐步判断盒子的类别。
首先分析题目条件:
- Bulky条件:任一维度 >= 10^4 或 体积 >= 10^9
- Heavy条件:质量 >= 100
解题步骤:
- 判断盒子是否为 Bulky:检查三个维度是否有任何一个 >= 10^4,或者计算体积是否 >= 10^9
- 判断盒子是否为 Heavy:检查质量是否 >= 100
- 根据两个布尔值的组合返回对应的字符串
需要注意的技术细节:
- 计算体积时要考虑整数溢出问题,可以使用 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) |
算法只需要进行常数次的条件判断和算术运算,无论输入规模如何,时间和空间消耗都是常数级别的。
相关题目
. Fizz Buzz (Easy)
. Best Poker Hand (Easy)