返回介绍

solution / 2100-2199 / 2125.Number of Laser Beams in a Bank / README_EN

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

2125. Number of Laser Beams in a Bank

中文文档

Description

Anti-theft security devices are activated inside a bank. You are given a 0-indexed binary string array bank representing the floor plan of the bank, which is an m x n 2D matrix. bank[i] represents the ith row, consisting of '0's and '1's. '0' means the cell is empty, while'1' means the cell has a security device.

There is one laser beam between any two security devices if both conditions are met:

  • The two devices are located on two different rows: r1 and r2, where r1 < r2.
  • For each row i where r1 < i < r2, there are no security devices in the ith row.

Laser beams are independent, i.e., one beam does not interfere nor join with another.

Return _the total number of laser beams in the bank_.

 

Example 1:

Input: bank = ["011001","000000","010100","001000"]
Output: 8
Explanation: Between each of the following device pairs, there is one beam. In total, there are 8 beams:
 * bank[0][1] -- bank[2][1]
 * bank[0][1] -- bank[2][3]
 * bank[0][2] -- bank[2][1]
 * bank[0][2] -- bank[2][3]
 * bank[0][5] -- bank[2][1]
 * bank[0][5] -- bank[2][3]
 * bank[2][1] -- bank[3][2]
 * bank[2][3] -- bank[3][2]
Note that there is no beam between any device on the 0th row with any on the 3rd row.
This is because the 2nd row contains security devices, which breaks the second condition.

Example 2:

Input: bank = ["000","111","000"]
Output: 0
Explanation: There does not exist two devices located on two different rows.

 

Constraints:

  • m == bank.length
  • n == bank[i].length
  • 1 <= m, n <= 500
  • bank[i][j] is either '0' or '1'.

Solutions

Solution 1

class Solution:
  def numberOfBeams(self, bank: List[str]) -> int:
    last = ans = 0
    for b in bank:
      if (t := b.count('1')) > 0:
        ans += last * t
        last = t
    return ans
class Solution {
  public int numberOfBeams(String[] bank) {
    int last = 0;
    int ans = 0;
    for (String b : bank) {
      int t = 0;
      for (char c : b.toCharArray()) {
        if (c == '1') {
          ++t;
        }
      }
      if (t > 0) {
        ans += last * t;
        last = t;
      }
    }
    return ans;
  }
}
class Solution {
public:
  int numberOfBeams(vector<string>& bank) {
    int ans = 0;
    int last = 0;
    for (auto& b : bank) {
      int t = 0;
      for (char& c : b)
        if (c == '1')
          ++t;
      if (t) {
        ans += last * t;
        last = t;
      }
    }
    return ans;
  }
};
func numberOfBeams(bank []string) int {
  ans, last := 0, 0
  for _, b := range bank {
    t := strings.Count(b, "1")
    if t > 0 {
      ans += t * last
      last = t
    }
  }
  return ans
}
function numberOfBeams(bank: string[]): number {
  let last = 0;
  let ans = 0;
  for (const r of bank) {
    let t = 0;
    for (const v of r) {
      if (v === '1') {
        t++;
      }
    }
    if (t !== 0) {
      ans += last * t;
      last = t;
    }
  }
  return ans;
}
impl Solution {
  pub fn number_of_beams(bank: Vec<String>) -> i32 {
    let mut last = 0;
    let mut ans = 0;
    for r in bank.iter() {
      let mut t = 0;
      for &v in r.as_bytes() {
        if v == b'1' {
          t += 1;
        }
      }
      if t != 0 {
        ans += last * t;
        last = t;
      }
    }
    ans
  }
}
int numberOfBeams(char** bank, int bankSize) {
  int last = 0;
  int ans = 0;
  for (int i = 0; i < bankSize; i++) {
    int t = 0;
    for (int j = 0; bank[i][j]; j++) {
      if (bank[i][j] == '1') {
        t++;
      }
    }
    if (t != 0) {
      ans += last * t;
      last = t;
    }
  }
  return ans;
}

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

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

发布评论

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