Leetocde 221. Maximal Square

90 篇文章 0 订阅
3 篇文章 0 订阅

一个深度优先,最开始错误在想减少时间设置了visit数组,访问的不在访问,但实际是不对的。比如:

[["0","0","0","1"],["1","1","0","1"],["1","1","1","1"],["0","1","1","1"],["0","1","1","1"]]

后来老老实实做时间空间也都很好。

Runtime: 20 ms, faster than 97.16% of C++ online submissions for Maximal Square.
Memory Usage: 10.6 MB, less than 100.00% of C++ online submissions for Maximal Square.

221. Maximal Square

Medium

121231FavoriteShare

Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.

Example:

Input: 

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

Output: 4

 

class Solution {
public:
    //左上角为顶点 查找最大面积 访问过的1全部标记为访问
int maximalSquare(vector<vector<char>>& matrix)
{
    
	int max = 0;
	
	for (int i = 0; i < matrix.size(); i++) 
	{
		for (int j = 0; j < matrix[i].size(); j++) 
		{
            
			if (matrix[i][j] == '1') //是1且没有访问过
			{
               
				int temp = 1;
				int length = 1;//当前边长
				while (true)//每循环一次边长加一 正方形新加入最右边一列 最下面一行
				{
					++length;//测试边长增加还是正方形吗
                    if ((i + length - 1) >= matrix.size()) //出界
					{
						--length;
						break;
					}
					if ((j + length - 1) >= matrix[i].size()) //出界
					{
						--length;
						break;
					}
					bool out = false;
					for (int k = 0; k < length; k++) //测试新加入的列是不是都是1 纵坐标不变 横坐标动
					{
						if (matrix[k + i][j + length - 1]=='1') 
						{
							
						}
						else 
						{
							out = true;//跳出循环
							--length;//length不能变长
							break;
						}
					}
					if (out)break;
					for (int k = 0; k < length-1; k++) //测试新加入的行是不是都是1 横坐标不变 纵坐标动
					{
						if (matrix[i + length - 1][k + j] == '1')
						{
							
						}
						else
						{
							out = true;//跳出循环
							--length;//length不能变长
							break;
						}
					}
					if (out)break;
				}
				temp = length * length;
               // cout<<length<<endl;
				max = (max > temp) ? max : temp;
			}
		}
	}

	

	return max;
}
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值