-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2125.go
70 lines (66 loc) · 2.57 KB
/
2125.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Source: https://leetcode.com/problems/number-of-laser-beams-in-a-bank
// Title: Number of Laser Beams in a Bank
// Difficulty: Medium
// Author: Mu Yang <http://muyang.pro>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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:
//
// https://assets.leetcode.com/uploads/2021/12/24/laser1.jpg
//
// 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:
//
// https://assets.leetcode.com/uploads/2021/12/24/laser2.jpg
//
// 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'.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package main
import (
"strings"
)
// O(n) time, O(1) space
// Sum of products of devices count between adjency rows. Skipping empty rows
func numberOfBeams(bank []string) int {
res := 0
prevCount := 0
for _, row := range bank {
currCount := strings.Count(row, "1")
if currCount == 0 {
continue
}
res += prevCount * currCount
prevCount = currCount
}
return res
}