1.動態規劃
設矩陣的長寬為m,n,dp[m+1][n+1],
其中dp[i][j]表示以(i-1,j-1)為右下方元素的最大正方形的邊長,初始dp全為0
遍歷矩陣中每乙個元素,若matrix(i,j)=0,則跳過
若matrix(i,j)不為0,則dp[i][j]的值由dp[i-1][j-1] dp[i-1][j] dp[i][j-1]的最小值決定
有兩種情況:
1)dp[i-1][j-1] dp[i-1][j] dp[i][j-1]中至少有乙個值為0,說明矩陣中對應位置為0,則以(i,j)為右下方的正方形邊長為1
2)dp[i-1][j-1] dp[i-1][j] dp[i][j-1]的值都不為0,則dp[i][j]的值為dp[i-1][j-1] dp[i-1][j] dp[i][j-1]的最小值+1
**如下:
class solution
return imax*imax;}};
還可以繼續優化,使用o(n)的空間複雜度
2.優化
LeetCode 最大正方形
在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 思路分析 使用動態規劃。轉移方程為dp row col 1 min dp row 1 col 1 min dp r...
最大正方形
題目鏈結 在乙個n m的只包含0和1的矩陣裡找出乙個不包含0的最大正方形,輸出邊長。輸入格式 輸入檔案第一行為兩個整數n,m 1 n,m 100 接下來n行,每行m個數字,用空格隔開,0或1.輸出格式 乙個整數,最大正方形的邊長 輸入樣例 1 複製 4 4 0 1 1 1 1 1 1 0 0 1 1...
最大正方形
題解 if a i j 1 f i j min min f i j 1 f i 1 j f i 1 j 1 1 f i j 表示以節點i,j為右下角,可構成的最大正方形的邊長。只有a i j 1時,節點i,j才能作為正方形的右下角 對於乙個已經確定的f i j x,它表明包括節點i,j在內向上x個節...