題目描述:
思路:本題需要返回矩陣中最大的正方形面積,計算正方形面積只要知道邊長即可。申請乙個跟matrix矩陣維度相同的dpdp在乙個由 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陣列,將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...