js + leetcode刷題:No.221 最大正方形

思路:用 dp(i,j) 表示以 (i,j) 爲右下角,且只包含 1 的正方形的邊長最大值。如果我們能計算出所有 dp(i,j) 的值,那麼其中的最大值即爲矩陣中只包含 1 的正方形的邊長最大值,其平方即爲最大正方形的面積。
動態規劃的關鍵在於,用dp表示什麼,找到合適的狀態。

題目:

  1. 最大正方形
    在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。

示例:

輸入:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

輸出: 4

解法:

/**
 * @param {character[][]} matrix
 * @return {number}
 */
var maximalSquare = function(matrix){
    let maxSide = 0;
    if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
        return maxSide
    }
    let m = matrix.length, n = matrix[0].length,
        dp = Array.from(new Array(m), () => new Array(n).fill(0));
    for(let i = 0; i < m; i++){
        for(let j = 0; j < n; j++){
            if(matrix[i][j] == '1'){
                if(i == 0 || j == 0){
                    dp[i][j] = 1
                }else{
                    dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
                }
                maxSide = Math.max(maxSide, dp[i][j])
            }
        }
    }
    return Math.pow(maxSide, 2)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章