返回介绍

solution / 2500-2599 / 2525.Categorize Box According to Criteria / README

发布于 2024-06-17 01:03:04 字数 7847 浏览 0 评论 0 收藏 0

2525. 根据规则将箱子分类

English Version

题目描述

给你四个整数 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];
  }
};
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];
}
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()
  }
}

方法二

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"
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";
  }
}
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";
  }
};
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"
}
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';
}
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()
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文