python leetcode 日记--Maximal Square--221
题目:
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.
For example, given the following matrix:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
Return 4.
本题为一个典型的动态规划问题,因此可以使用动态规划的思想进行。
step1,初始化原始行和列
step2,构建存储结果矩阵(其大小与原始问题空间一样)
step3,对结果矩阵进行遍历找出最优解
其中,step2是动态规划的核心,其主要思想为将整个问题划分为若干个子问题,对于每个子问题,都可以借助其他子问题的解来得到自己的解;
那么对应到问题中核心思想如何理解呢?
1 | 1 | 1 | 1 |
1 | 1 | 0 | 1 |
0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
如上这个4*4表格,首先我们假定是有当前位置相左上方画正方形,那么(0,0)位置开始,初始化时仅看第一行第一列,因为是边界,因此如果值等于1,那么表示可以画出一个1单位长度的正方形满足题意。若等于0,则表示没有满足的正方形。根据此原则,结果矩阵第一行为(1,1,1,1)第一列为(1,1,0,1),然后从(1,1)位置开始遍历剩余的位置。那么怎么划分子问题呢?其实划分子问题已经开始了,比如现在在(1,1)位置,因为此位置已经为1,如果(1,1)左上方的三个位置都为的话,那么对于(1,1)这个位置的对应的结果矩阵就可以为2,而要知道剩下三个位置是否为1,只需要查那三个位置的结果矩阵即可,因为结果矩阵纪录了能够画出多少个单位长度的正方形,根据这个原理,只要找到三个中的最小值,在加上自己的这个位置,就可以得到结果。这样遍历下来,结果矩阵就纪录了从此点向左上方画正方形所满足题意的最大值。
本人的实现代码如下:
class Solution(object):
def maximalSquare(self, matrix):
if not matrix:
return 0
lines=len(matrix)
lists=len(matrix[0])
mat=[[0]*lists for i in range(lines)]
#初始化
for i in range(lists):
mat[0][i]=int(matrix[0][i])
for i in xrange(lines):
mat[i][0]=int(matrix[i][0])
result=0
#构造结果矩阵
for i in xrange(1,lines):
for j in xrange(1,lists):
mat[i][j]=int(matrix[i][j])
if mat[i][j] is not 0:
mat[i][j]=(min(mat[i-1][j-1],mat[i][j-1],mat[i-1][j])+1)
result=0
#遍历结果矩阵得到结果
for i in mat:
for j in i:
if result<j:
result=j
return result**2
python leetcode 日记--Maximal Square--221的更多相关文章
- python leetcode 日记 --Contains Duplicate II --219
题目: Given an array of integers and an integer k, find out whether there are two distinct indices i a ...
- python leetcode 日记 --Contains Duplicate --217
题目 Given an array of integers, find if the array contains any duplicates. Your function should retur ...
- leetcode之Maximal Square
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...
- python leetcode 日记--231. Power of Two
题目: Given an integer, write a function to determine if it is a power of two. class Solution(object): ...
- leetcode每日解题思路 221 Maximal Square
问题描述: 题目链接:221 Maximal Square 问题找解决的是给出一个M*N的矩阵, 只有'1', '0',两种元素: 需要你从中找出 由'1'组成的最大正方形.恩, 就是这样. 我们看到 ...
- 求解最大正方形面积 — leetcode 221. Maximal Square
本来也想像园友一样,写一篇总结告别 2015,或者说告别即将过去的羊年,但是过去一年发生的事情,实在是出乎平常人的想象,也不具有代表性,于是计划在今年 6 月份写一篇 "半年总结" ...
- 【LeetCode】221. Maximal Square
Maximal Square Given a 2D binary matrix filled with 0's and 1's, find the largest square containing ...
- 【刷题-LeetCode】221. Maximal Square
Maximal Square Given a 2D binary matrix filled with 0's and 1's, find the largest square containing ...
- 【动态规划】leetcode - Maximal Square
称号: Maximal Square Given a 2D binary matrix filled with 0's and 1's, find the largest square contain ...
随机推荐
- python中的正则表达式(re模块)
一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎 ...
- CSS 盒子模型概述
一.简介 CSS 盒子模型(元素框)由元素内容(content).内边距(padding).边框(border).外边距(margin)组成. 盒子模型,最里面的部分是实际内容:直接包围内 ...
- 浏览器URL编码
jsp页面中通过请求另一个页面并通过url传递了带有中文的参数,结果在接收端获取参数时乱码了 经检查乱码现象指出新在IE浏览器中,其他浏览器火狐.chrome等不会有问题 最后的解决方式是: 手动将此 ...
- 我的android学习经历37
android虚拟机没有键盘的问题,那是因为建立虚拟机的时候没有选择skin,重新编辑选择skin就可以了
- [Golang] 一个简易代理池
晚上写了一个代理池,就是在一个代理网站上爬取代理ip和端口以及测试是否可用.接下来可能考虑扩展成一个比较大的 golang实现的代理池. 简易版代码: package main import ( &q ...
- Shiro Security
手动创建shiro Filter的java代码 // Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecu ...
- iOS - Mac Apache WebDav 服务器配置
前言 Apache 服务器: Web 服务器,可以支持各种脚本(PHP)的执行,目前世界上使用最为广泛的一种 Web 服务器 WebDav 服务器: 基于 http 协议的 "文件" ...
- python成长之路【第五篇】:python字符编码
在2.7环境中我们要写上这一行#-*- coding:utf-8 -*- 为什么我们要加这一行呢?这一样的意思是置顶编码类型为utf-8编码! 首先在看这个问题之前,咱们是否曾想过一个问题? 为什么我 ...
- struts(三) ---OGNL的学习和理解
OGNL:Object graphic Navgation Language(对象图形的导航语言)
- CSS 3 选择器
css3叫做样式表 对页面的布局,字体,颜色,背景和其他效果做更精确的布置 支持的浏览器有 chrome safari firfox opera 甚至360都开始支持360用的是别的内核 IE10 ...