750. Number Of Corner Rectangles π
Description
Given an m x n
integer matrix grid
where each entry is only 0
or 1
, return the number of corner rectangles.
A corner rectangle is four distinct 1
's on the grid that forms an axis-aligned rectangle. Note that only the corners need to have the value 1
. Also, all four 1
's used must be distinct.
Example 1:
Input: grid = [[1,0,0,1,0],[0,0,1,0,1],[0,0,0,1,0],[1,0,1,0,1]] Output: 1 Explanation: There is only one corner rectangle, with corners grid[1][2], grid[1][4], grid[3][2], grid[3][4].
Example 2:
Input: grid = [[1,1,1],[1,1,1],[1,1,1]] Output: 9 Explanation: There are four 2x2 rectangles, four 2x3 and 3x2 rectangles, and one 3x3 rectangle.
Example 3:
Input: grid = [[1,1,1,1]] Output: 0 Explanation: Rectangles must have four distinct corners.
Constraints:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
grid[i][j]
is either0
or1
.- The number of
1
's in the grid is in the range[1, 6000]
.
Solutions
Solution 1: Hash Table + Enumeration
We enumerate each row as the bottom of the rectangle. For the current row, if both column \(i\) and column \(j\) are \(1\), then we use a hash table to find out how many of the previous rows have both columns \(i\) and \(j\) as \(1\). This is the number of rectangles with \((i, j)\) as the bottom right corner, and we add this number to the answer. Then we add \((i, j)\) to the hash table and continue to enumerate the next pair \((i, j)\).
The time complexity is \(O(m \times n^2)\), and the space complexity is \(O(n^2)\). Here, \(m\) and \(n\) are the number of rows and columns of the matrix, respectively.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|