LeetCode 221 最大正方形

2021-09-28 18:23:52 字數 1670 閱讀 6130

題目描述:

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

輸入:

1 0 1 0 0

1 0 1 1 1

1 1 1 1 1

1 0 0 1 0

輸出: 4

思路:本題需要返回矩陣中最大的正方形面積,計算正方形面積只要知道邊長即可。申請乙個跟matrix矩陣維度相同的dpdp

dp陣列,將dpdp

dp陣列的第一行和第一列初始化成matrix的第一行和第一列。

狀態轉移方程:$dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1 $ , ifm

atri

x[i]

[j]=

=′1′

if matrix[i][j]=='1'

ifmatr

ix[i

][j]

==′1

′,dp[i

][j]

dp[i][j]

dp[i][

j]對應於matrix[i][j]的正方形的最右下角元素。

狀態轉移方程的得到方法:試想2*2的正方形,如果要保證正方形必須要除了左上左上角都是1才能構成。

class solution {

public:

int maximalsquare(vector>& matrix) {

if(matrix.empty()||matrix[0].empty())

return 0;

int row=matrix.size();

int col=matrix[0].size();

vector> dp(row,vector(col,0));

int maxsqsize=0;//對於這個變數的賦值需要注意

這裡想通了為什麼dpdp

dp陣列都需要多申請乙個單元了

class solution {

public:

int maximalsquare(vector>& matrix) {

if(matrix.empty()||matrix[0].empty())

return 0;

int row=matrix.size();

int col=matrix[0].size();

vector> dp(row+1,vector(col+1,0));

int maxsqsize=0;//多申請了乙個單元,就不需要對這個元素做特別的處理了

//這個雙層迴圈一定會執行

LeetCode221 最大正方形

在乙個由 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 m n 其中dp i j 表示以座標 i,j 為右下角元素的最大正方形的邊長。通過觀...

Leetcode 221 最大正方形

在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 思路 和最大長方形類似 可以參照不過每次的max換位長和寬中選取最小值,算他們的平方 提交的 class solu...

leetcode221 最大正方形

在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 10 1001 0111 1111 1100 10輸出 4暴力 以每乙個為1的元素開始求向右向下發展的最大結果 class solution return res res private void dfs...