銀行內部的防盜安全裝置已經激活。給你一個下標從 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 {
public:int numberOfBeams(vector<string>& bank) {int ans = 0;int last = 0;for (string &row : bank){int deviceNum = count(row.begin(), row.end(), '1');if (deviceNum == 0){continue;}ans += deviceNum * last;last = deviceNum;}return ans;}
};