• 菜鸟记录一下给自己回忆,大哥绕道哈哈

  • 实现思路:

    • 使用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语法很多不支持