题解 | #最大正方形#
最大正方形
http://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e
-
菜鸟记录一下给自己回忆,大哥绕道哈哈
-
实现思路:
- 使用dp[i][j] 表示第i行第j列的最大正方形的边长
/**
* 最大正方形
* @param matrix char字符型二维数组
* @return int整型
*/
function solve( matrix ) {
// write code here
const rows = matrix.length;
const cols = matrix[0] ? matrix[0].length : 0;
// log(rows, cols)
if(rows===0 || cols===0 ) return 0;
// 记录答案
let dp = []
let max = 0;
for(let i=0; i<rows; ++i){
dp.push([])
for(let j=0; j<cols; ++j){
if( matrix[i][j] === '1' ){
if(i===0 || j===0) {
dp[i][j] = 1;
}else{
dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1;
}
}else{
dp[i][j] = 0;
}
if(dp[i][j] > max ){
max = dp[i][j]
}
}
}
return max*max;
}
module.exports = {
solve : solve
};
- 注意js的二维数组使用
- 注意 输入的矩阵的字符类型,在第一次使用牛客网的编译器的时候,因为自己本地测过了再粘贴过来,而本地用的是整形,导致两边的输出不一致,调试了很久,呜呜
- 注意es6语法很多不支持