题目描述
给你四个整数 length
,width
,height
和 mass
,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子 类别 的字符串。
- 如果满足以下条件,那么箱子是
"Bulky"
的:
- 箱子 至少有一个 维度大于等于
104
。
- 或者箱子的 体积 大于等于
109
。
- 如果箱子的质量大于等于
100
,那么箱子是 "Heavy"
的。
- 如果箱子同时是
"Bulky"
和 "Heavy"
,那么返回类别为 "Both"
。
- 如果箱子既不是
"Bulky"
,也不是 "Heavy"
,那么返回类别为 "Neither"
。
- 如果箱子是
"Bulky"
但不是 "Heavy"
,那么返回类别为 "Bulky"
。
- 如果箱子是
"Heavy"
但不是 "Bulky"
,那么返回类别为 "Heavy"
。
注意,箱子的体积等于箱子的长度、宽度和高度的乘积。
示例 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
解法
方法一:模拟
根据题意模拟即可。
时间复杂度 $O(1)$,空间复杂度 $O(1)$。
| class Solution:
def categorizeBox(self, length: int, width: int, height: int, mass: int) -> str:
v = length * width * height
bulky = int(any(x >= 10000 for x in (length, width, height)) or v >= 10**9)
heavy = int(mass >= 100)
i = heavy << 1 | bulky
d = ['Neither', 'Bulky', 'Heavy', 'Both']
return d[i]
|
| class Solution {
public String categorizeBox(int length, int width, int height, int mass) {
long v = (long) length * width * height;
int bulky = length >= 10000 || width >= 10000 || height >= 10000 || v >= 1000000000 ? 1 : 0;
int heavy = mass >= 100 ? 1 : 0;
String[] d = {"Neither", "Bulky", "Heavy", "Both"};
int i = heavy << 1 | bulky;
return d[i];
}
}
|
| class Solution {
public:
string categorizeBox(int length, int width, int height, int mass) {
long v = (long) length * width * height;
int bulky = length >= 10000 || width >= 10000 || height >= 10000 || v >= 1000000000 ? 1 : 0;
int heavy = mass >= 100 ? 1 : 0;
string d[4] = {"Neither", "Bulky", "Heavy", "Both"};
int i = heavy << 1 | bulky;
return d[i];
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12 | func categorizeBox(length int, width int, height int, mass int) string {
v := length * width * height
i := 0
if length >= 10000 || width >= 10000 || height >= 10000 || v >= 1000000000 {
i |= 1
}
if mass >= 100 {
i |= 2
}
d := [4]string{"Neither", "Bulky", "Heavy", "Both"}
return d[i]
}
|
| function categorizeBox(length: number, width: number, height: number, mass: number): string {
const v = length * width * height;
let i = 0;
if (length >= 10000 || width >= 10000 || height >= 10000 || v >= 1000000000) {
i |= 1;
}
if (mass >= 100) {
i |= 2;
}
return ['Neither', 'Bulky', 'Heavy', 'Both'][i];
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | impl Solution {
pub fn categorize_box(length: i32, width: i32, height: i32, mass: i32) -> String {
let v = (length as i64) * (width as i64) * (height as i64);
let mut i = 0;
if length >= 10000 || width >= 10000 || height >= 10000 || v >= 1000000000 {
i |= 1;
}
if mass >= 100 {
i |= 2;
}
let d = vec!["Neither", "Bulky", "Heavy", "Both"];
d[i].to_string()
}
}
|
方法二
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | class Solution:
def categorizeBox(self, length: int, width: int, height: int, mass: int) -> str:
v = length * width * height
bulky = any(x >= 10000 for x in (length, width, height)) or v >= 10**9
heavy = mass >= 100
if bulky and heavy:
return "Both"
if bulky:
return "Bulky"
if heavy:
return "Heavy"
return "Neither"
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | class Solution {
public String categorizeBox(int length, int width, int height, int mass) {
long v = (long) length * width * height;
boolean bulky = length >= 1e4 || width >= 1e4 || height >= 1e4 || v >= 1e9;
boolean heavy = mass >= 100;
if (bulky && heavy) {
return "Both";
}
if (bulky) {
return "Bulky";
}
if (heavy) {
return "Heavy";
}
return "Neither";
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | class Solution {
public:
string categorizeBox(int length, int width, int height, int mass) {
long v = (long) length * width * height;
bool bulky = length >= 1e4 || width >= 1e4 || height >= 1e4 || v >= 1e9;
bool heavy = mass >= 100;
if (bulky && heavy) {
return "Both";
}
if (bulky) {
return "Bulky";
}
if (heavy) {
return "Heavy";
}
return "Neither";
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | func categorizeBox(length int, width int, height int, mass int) string {
v := length * width * height
bulky := length >= 1e4 || width >= 1e4 || height >= 1e4 || v >= 1e9
heavy := mass >= 100
if bulky && heavy {
return "Both"
}
if bulky {
return "Bulky"
}
if heavy {
return "Heavy"
}
return "Neither"
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | function categorizeBox(length: number, width: number, height: number, mass: number): string {
const v = length * width * height;
const bulky = length >= 1e4 || width >= 1e4 || height >= 1e4 || v >= 1e9;
const heavy = mass >= 100;
if (bulky && heavy) {
return 'Both';
}
if (bulky) {
return 'Bulky';
}
if (heavy) {
return 'Heavy';
}
return 'Neither';
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | impl Solution {
pub fn categorize_box(length: i32, width: i32, height: i32, mass: i32) -> String {
let v = length * width * height;
let bulky = length >= 10000
|| width >= 10000
|| height >= 10000
|| (length as i64) * (width as i64) * (height as i64) >= 1000000000;
let heavy = mass >= 100;
if bulky && heavy {
return "Both".to_string();
}
if bulky {
return "Bulky".to_string();
}
if heavy {
return "Heavy".to_string();
}
"Neither".to_string()
}
}
|