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:
r1 and r2, where r1 < r2.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.lengthn == bank[i].length1 <= m, n <= 500bank[i][j] is either '0' or '1'.This approach involves breaking down the problem into overlapping subproblems, solving each subproblem only once, and storing their solutions - typically in a table. This can help reduce redundant calculations and improve efficiency.
The provided C solution uses a dynamic programming array to store the results of intermediate calculations. The base case is initialized, and subsequent entries are computed based on the previous value, iterating from 1 to n, where n is the given input.
C++
Java
Python
C#
JavaScript
Time Complexity: O(n), as each subproblem from 1 to n is solved once.
Space Complexity: O(n), due to the storage of results in the dp array.
A recursive approach solves the problem by solving smaller instances of the same problem. While this is a straightforward approach, it may lead to inefficiencies without memoization or optimizations because it can repeatedly solve the same subproblems.
This recursive C solution calls itself with a reduced problem size until it hits the base case. Each call multiplies the return value by 2.
C++
Java
Python
C#
JavaScript
Time Complexity: O(2^n), due to many duplicate subproblem calculations without memoization.
Space Complexity: O(n), considering the call stack.
| Approach | Complexity |
|---|---|
| Dynamic Programming Approach | Time Complexity: O(n), as each subproblem from 1 to n is solved once. |
| Recursive Approach | Time Complexity: O(2^n), due to many duplicate subproblem calculations without memoization. |
Number of Laser Beams in a Bank - Leetcode 2125 - Python • NeetCodeIO • 12,949 views views
Watch 9 more video solutions →Practice Number of Laser Beams in a Bank with our built-in code editor and test cases.
Practice on FleetCodePractice this problem
Open in Editor