LeetCode-in-TypeScript.github.io

221. Maximal Square

Medium

Given an m x n binary matrix filled with 0’s and 1’s, find the largest square containing only 1’s and return its area.

Example 1:

Input: matrix = [[“1”,”0”,”1”,”0”,”0”],[“1”,”0”,”1”,”1”,”1”],[“1”,”1”,”1”,”1”,”1”],[“1”,”0”,”0”,”1”,”0”]]

Output: 4

Example 2:

Input: matrix = [[“0”,”1”],[“1”,”0”]]

Output: 1

Example 3:

Input: matrix = [[“0”]]

Output: 0

Constraints:

Solution

function maximalSquare(matrix: string[][]): number {
    const m = matrix.length
    if (m === 0) {
        return 0
    }
    const n = matrix[0].length
    if (n === 0) {
        return 0
    }
    const dp: number[][] = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0))
    let max = 0
    for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
            if (matrix[i][j] === '1') {
                // 1 + minimum from cell above, cell to the left, cell diagonal upper-left
                const next = 1 + Math.min(dp[i][j], Math.min(dp[i + 1][j], dp[i][j + 1]))
                // keep track of the maximum value seen
                if (next > max) {
                    max = next
                }
                dp[i + 1][j + 1] = next
            }
        }
    }
    return max * max
}

export { maximalSquare }