Skip to content

1277. Count Square Submatrices with All Ones

Description

Given a m * n matrix of ones and zeros, return how many square submatrices have all ones.

 

Example 1:

Input: matrix =
[
  [0,1,1,1],
  [1,1,1,1],
  [0,1,1,1]
]
Output: 15
Explanation: 
There are 10 squares of side 1.
There are 4 squares of side 2.
There is  1 square of side 3.
Total number of squares = 10 + 4 + 1 = 15.

Example 2:

Input: matrix = 
[
  [1,0,1],
  [1,1,0],
  [1,1,0]
]
Output: 7
Explanation: 
There are 6 squares of side 1.  
There is 1 square of side 2. 
Total number of squares = 6 + 1 = 7.

 

Constraints:

  • 1 <= arr.length <= 300
  • 1 <= arr[0].length <= 300
  • 0 <= arr[i][j] <= 1

 

Solutions

Solution: Dynamic Programming

  • Time complexity: O(mn)
  • Space complexity: O(1)

 

JavaScript

js
/**
 * @param {number[][]} matrix
 * @return {number}
 */
const countSquares = function (matrix) {
  const m = matrix.length;
  const n = matrix[0].length;
  let result = 0;

  for (let row = 1; row < m; row++) {
    for (let col = 1; col < n; col++) {
      if (!matrix[row][col]) continue;

      const topCount = matrix[row - 1][col];
      const leftCount = matrix[row][col - 1];
      const cornerCount = matrix[row - 1][col - 1];

      matrix[row][col] += Math.min(topCount, leftCount, cornerCount);
    }
  }

  for (let row = 0; row < m; row++) {
    result += matrix[row].reduce((total, count) => total + count);
  }

  return result;
};

Released under the MIT license