[LeetCode][JavaScript]Maximal Square
2016-02-28 21:23
736 查看
Maximal Square
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.
https://leetcode.com/problems/maximal-square/
找出地图中最大的一个由1组成的正方形。
动态规划,大的正方型是由小的正方形加上两条边组成的。
遍历二维数组,第一次遇到1的时候,dp数组的对应位置也记做1.
再遇到1的时候,查看这个点的左上角(dp[i - 1][j - 1])是不是存在,以及检查上边和左边是否全部是1。
举例来说:
1 1
1 1
遍历到右下的点(坐标[1][1])。
发现左上角是1,又知道当前点的左边和上面也是1,说明构成了2X2的正方形,把当前点在dp数组中记做2。
复杂点的情况比如:
1 1 0
1 1 1
1 1 1
坐标为[0][0]的点在dp中记做1,坐标为[1][1]的点记做2,没有问题。
当遍历到[3][3]时,因为[0][2]是0,所以[3][3]在dp中只能记做2。
最后,因为dp中记录的是矩形的宽度,return的时候返回平方数。
/** * @param {character[][]} matrix * @return {number} */ var maximalSquare = function(matrix) { if(matrix.length === 0) return 0; var max = 0, i, j, dp = [], height = matrix.length, width = matrix[0].length; for(i = 0; i < height; i++) dp[i] = []; for(i = 0; i < height; i++){ for(j = 0; j < width; j++){ if(matrix[i][j] === '1'){ dp[i][j] = getSquare(i, j); max = Math.max(max, dp[i][j]); } } } return max * max; function getSquare(i, j){ if(!matrix[i - 1] || !matrix[i - 1][j - 1]) return 1; var index, width = dp[i - 1][j - 1]; if(!width) return 1; for(index = 1; index <= width; index++) if(!matrix[i - index] || matrix[i - index][j] !== '1' || matrix[i][j - index] !== '1') return index; return width + 1; } };
相关文章推荐
- [Hapi.js] Serving static files
- JavaScript 正则表达式
- javascript命名问题
- Java与javascript
- JavaScript 垃圾回收
- JS1-属性操作
- javascript & DHTML cookbook摘抄
- [LeetCode][JavaScript]Perfect Squares
- 用JS 和 jQery获取屏幕的高度和宽度
- C json实战引擎 二 , 实现构造部分
- js的数组申明
- 彻底理解js中this的指向
- javascript插件开发的一些感想和心得
- JavaScript面向对象实例---tab选项卡
- javascript 小知识总结
- 详解Javascript中的Object对象
- JavaScript高级程序设计学习笔记第十五章--使用Canvas绘图
- js闭包,解决for循环变量未定义等类似问题
- javascript中对条件推断语句的优化
- Javascript的io操作