LeetCode 0750. Number Of Corner Rectangles Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0750. 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 either 0 or 1.
  • 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 × 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.

PythonJavaC++GoTypeScript
class Solution: def countCornerRectangles(self, grid: List[List[int]]) -> int: ans = 0 cnt = Counter() n = len(grid[0]) for row in grid: for i, c1 in enumerate(row): if c1: for j in range(i + 1, n): if row[j]: ans += cnt[(i, j)] cnt[(i, j)] += 1 return ans(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !