int maximalSquare(vector<vector<char>>& matrix) {
int height=matrix.size();
if(height==)
return ;
int width=matrix[].size();
vector<vector<int>> vec(height,vector<int>(width,));
int result=;
for(int i=;i<height;i++)
{
for(int j=;j<width;j++)
{
if(matrix[i][j]=='')
{
vec[i][j]=;
if(i>&&j>)
vec[i][j]+=min(min(vec[i-][j],vec[i][j-]),vec[i-][j-]);
}
result=max(result,vec[i][j]);
}
}
return result*result; }

本题是动态规划的题目,vec[i,j]记录的是以matrix[i,j]为右下角的所能构成的正方形区域的边长的最大值。

递推公式,vec[i][j] = 1 + min(min(vec[i-1][j],vec[i][j-1]),vec[i-1][j-1]),计算的是当前单元格的“左”、“上”、“左上”三个单元格的最小值,再+1。

补充一个python的实现:注意i和j的值在matrix和dp中表示位置不同。

 class Solution:
def maximalSquare(self, matrix: 'List[List[str]]') -> 'int':
m = len(matrix)
if m == :
return
n = len(matrix[])
dp = [[ for _ in range(n+)]for _ in range(m+)]
res =
for i in range(m):
for j in range(n):
if matrix[i][j] == '':
dp[i+][j+] = min(min(dp[i][j+],dp[i+][j]),dp[i][j]) +
res = max(res,dp[i+][j+])
return res * res

例如:对于输入测试样本,当遍历到红色的数字1时(i=2,j=3)

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

当i=2  j=3时,dp[3][4]的值是:dp[2][3]、dp[2][4]、dp[3][3]这三个位置的最小值1,再加上1。因此dp[3][4] = 1 + 1 = 2(即下图中的红色方框区域的计算)。

按照次递推公式计算,可得到如下二维数组dp:

leetcode221的更多相关文章

  1. [Swift]LeetCode221. 最大正方形 | Maximal Square

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

  2. [Leetcode221]最大面积 Maximal Square

    [题目] Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's a ...

  3. leetcode221 Maximal Square

    思路: dp. 实现: class Solution { public: int maximalSquare(vector<vector<char>>& matrix) ...

  4. Leetcode221. Maximal Square最大正方形

    在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 方法一 ...

  5. 我熬夜读完这份“高分宝典”,竟4面拿下字节跳动offer

    前言 怎样的契机? 实际上,目前毕业已经两年时间了,在大学时就已经开始关注字节跳动的发展.一开始,我是电气自动化专业的,大二清楚目标之后就转计算机了,大四进了一家小型的互联网公司实习,具体就不说哪家了 ...

随机推荐

  1. 简述servlet

    什么是Servlet? Servlet是一种动态的web开发技术,本质就是一个运行在服务端的Java小程序,负责处理业务逻辑,生成动态web内容. 编写一个servlet步骤: 1.编写一个类  继承 ...

  2. 一款非常不错的重写listctrl类-CListCtrlEx

    原文在:https://www.codeproject.com/Articles/28063/An-Extended-MFC-CListCtrl-to-edit-individual-cells li ...

  3. css的性质

    css两个性质: 1.继承性 2.层叠行(选择器的一种选择能力,谁的权重大就选谁) A.选不中,走继承性,(font系列.color.text系列)权重是0 a)有多个父级都设置了这样的样式   走就 ...

  4. FreeSWITCH添加中文语音

    1.准备中文语音包 可以到freeswitch官网下载,也可以自己录制 2.中文资源的安装路径:  英文资源的路径为conf/sounds/en/us/callie/...  类似的设置中文资源的路径 ...

  5. 2.oracle之用户管理sql

    --创建用户--create user  用户名  identified by  密码;create user jojo identified by bean; --给用户授权--grant conn ...

  6. 【leetcode】443. String Compression

    problem 443. String Compression Input ["a","a","b","b"," ...

  7. 软件工程 week 03

    一.效能分析 1.作业地址:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2139 2.git地址:https://git.coding.ne ...

  8. python gevent自动挡的协程切换。

    import gevent def func(): print('running func 111')#第一步运行 gevent.sleep(2)#切换到下个协程 print('running fun ...

  9. SSH(远程登录)原理

    最近在研究hadoop,因为是分布式的,会涉及很多机器协作工作,但所有的操作都是需要进行权限验证的,namenode主机会尝试启动datanode主机上的进程等等.下面就用一张图来解释SSH登录验证的 ...

  10. python unittest setUp 和 setUpClass 区别

    import unittest class Test(unittest.TestCase): def setUp(self): print("start!=======") def ...