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

执行结果:

代码描述:

思路:先用最大的正方形去扫整个区域,如果没有,则对移动的正方形边长-1,然后继续扫描全局,直到找到。

最左侧大蓝框,一个格子一个格子的匹配,然后下一行继续匹配,直到最后。如果这个范围没有,则依次缩小,比如到土黄色框,然后继续扫描,直到找到或者退出。 由于是找最大的面积,所以格子从最大的开始。图像处理的原理。

class Solution {
public:
	int maximalSquare(vector<vector<char>>& matrix) {
		if (matrix.size() == 0 || matrix[0].size() == 0)
			return 0;
        if(matrix.size() == 1)
        {
            for(int i = 0; i < matrix[0].size(); ++i)
                if(matrix[0][i] == '1')
                    return 1;
            return 0;
        }
		int heigh = matrix.size();      //高,i 的最大值
        int width = matrix[0].size();   // 宽, j的最大值
        int maxLen = max(heigh, width)-1;       // -1 是因为索引从0开始
        while(maxLen >= 0)
        {
            for(int i = 0; i + maxLen < heigh; ++i)     // 注意边界
            {
                for(int j = 0; j + maxLen < width; ++j)     // 注意边界
                {
                    if(isMatrix(matrix, i, i+maxLen, j, j+maxLen) == true)
                    {
                        if(maxLen == 0) 
                            return 1;
                        return (maxLen+1)*(maxLen+1);
                    }   
                }
            }
            --maxLen;
        }
		return 0;
	}
    
    bool isMatrix(vector<vector<char>>& matrix, int is, int ie, int js, int je)
    {
        for(int i = is; i <= ie; ++i)
        {
            for(int j = js; j <= je; ++j)
            {
                if(matrix[i][j] == '0')
                    return false;
            }
        }
        return true;
    }
    
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值