Welcome to Subscribe On Youtube
2125. Number of Laser Beams in a Bank
Description
Antitheft security devices are activated inside a bank. You are given a 0indexed binary string array bank
representing the floor plan of the bank, which is an m x n
2D matrix. bank[i]
represents the i^{th}
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:
r_{1}
andr_{2}
, wherer_{1} < r_{2}
.  For each row
i
wherer_{1} < i < r_{2}
, there are no security devices in thei^{th}
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 0^{th} row with any on the 3^{rd} row. This is because the 2^{nd} 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

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; } };

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

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 } }