首页 > 其他分享 >力扣-221-最大正方形

力扣-221-最大正方形

时间:2022-11-06 15:35:04浏览次数:41  
标签:maxSideLength matrix int 力扣 正方形 221 && dp

题目题解是这么说的,定义一个二维dp数组
其中dp[i][j]表示以nums[i][j]为右下角的最大正方形
对于任意dp[i][j],如果dp[i][j]0,那它必不可能组成正方形,所以置0
对于dp[i][j]
k,只有dp[i-1][j-1]、dp[i-1][j]、dp[i][j-1]都不小于k-1才有可能组成正方形
如果只有两个或一个满足,则dp[i][j]=k-1
另外是需要一个最大数字来保存最大“边长”?

int maximalSquare(vector<vector<char>>& matrix) {
	int m = matrix.size(),n = matrix[0].size();
	vector<vector<int>> dp(m,vector<int>(n,0));
	int maxSideLength = 0;
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			// 初始化
			if (i == 0 && matrix[i][j] == '1') dp[i][j] = 1;
			if (j == 0 && matrix[i][j] == '1') dp[i][j] = 1;
			if (i>0&&j>0&&matrix[i][j] == '1') dp[i][j] = min(min(dp[i - 1][j], dp[i - 1][j - 1]), dp[i][j - 1])+1;
			if (dp[i][j] > maxSideLength) maxSideLength = dp[i][j];
		}
	}
	return pow(maxSideLength, 2);
}

这样,虽然我现在还没想明白为什么能这样,可能动态规划最难的就是想dp数组的定义了

尝试用三个变量替代dp数组做空间优化?感觉这个dp数组不是很好去掉的,得不偿失,但空间效率确实又比较差
还是就先这样吧

标签:maxSideLength,matrix,int,力扣,正方形,221,&&,dp
From: https://www.cnblogs.com/yaocy/p/16862614.html

相关文章