银行内部的防盗安全装置已经激活。给你一个下标从 0 开始的二进制字符串数组 bank
,表示银行的平面图,这是一个大小为 m x n
的二维矩阵。 bank[i]
表示第 i
行的设备分布,由若干 '0'
和若干 '1'
组成。'0'
表示单元格是空的,而 '1'
表示单元格有一个安全设备。
对任意两个安全设备而言,如果同时 满足下面两个条件,则二者之间存在 一个 激光束:
- 两个设备位于两个 不同行 :
r1
和r2
,其中r1 < r2
。 - 满足
r1 < i < r2
的 所有 行i
,都 没有安全设备 。
激光束是独立的,也就是说,一个激光束既不会干扰另一个激光束,也不会与另一个激光束合并成一束。
返回银行中激光束的总数量。
示例 1:
输入:bank = ["011001","000000","010100","001000"] 输出:8 解释:在下面每组设备对之间,存在一条激光束。总共是 8 条激光束: * 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] 注意,第 0 行和第 3 行上的设备之间不存在激光束。 这是因为第 2 行存在安全设备,这不满足第 2 个条件。
示例 2:
输入:bank = ["000","111","000"] 输出:0 解释:不存在两个位于不同行的设备
提示:
m == bank.length
n == bank[i].length
1 <= m, n <= 500
bank[i][j]
为'0'
或'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;
}