LeetCode題庫解答與分析——#221. 最大正方形MaximumSquare
阿新 • • 發佈:2019-01-23
在一個由0和1組成的二維矩陣內,尋找只包含1的最大正方形,並返回其面積。
例如,給出如下矩陣:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
返回 4.
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.
For example, given the following matrix:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
Return 4.
個人思路:
如果當前元素和其上、左、左上的值都大於0,則說明可構成正方形,取這四個值中最小的值加一作為當前元素值,即為當前正方形邊長,最後返回最大的邊長平方即可。
程式碼(JavaScript):
/** * @param {character[][]} matrix * @return {number} */ var maximalSquare = function(matrix) { var row=matrix.length; if(row==0){ return 0; } var col=matrix[0].length; var m=new Array(row); var max=0; for(var i=0;i<row;i++){ m[i]=new Array(col); for(var j=0;j<col;j++){ m[i][j]=matrix[i][j]; max=Math.max(max,m[i][j]); } } for(var i=1;i<row;i++){ for(var j=1;j<col;j++){ if(m[i][j]>0&&m[i-1][j-1]>0&&m[i-1][j]>0&&m[i][j-1]>0){ m[i][j]=Math.min(Math.min(m[i-1][j-1],m[i-1][j]),m[i][j-1])+1; max=Math.max(max,m[i][j]); } } } return max*max; };