微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法理解为什么javascript跳过循环中的迭代器数量

如何解决无法理解为什么javascript跳过循环中的迭代器数量

这是一个任务 给定一个用0和1填充的2D二进制矩阵,找到仅包含1的最大正方形并返回其面积。

示例:

输入:

1 0 1 0 0

1 0 1 1 1

1 1 1 1 1

1 0 0 1 0

输出:4

下面是我写的答案,它通过了25个测试用例,然后卡在下面的这个用例中。它给出了答案25,但被接受的4除外。所以对我来说,它意味着整个矩阵都包含1。好的然后问题出在函数if(matrix[j][i] === "0")中的if语句find_max中。然后我控制台登录j,实际上我不知道为什么,但是当它遍历它时,它会跳过数字2。我不知道为什么。它将变为0、1、3。如果您发现任何错误,请快速浏览一下,如果不用担心,我会尝试将其重写。

  let maximalSquare = mx([
["1","1","1"],["1",["0","0","0"],"1"]

]);
console.log(maximalSquare);

function mx(matrix) {
    let max_length = 0;
    let cur_length = 0;
    if(matrix.length === 0)
        return 0;
    if(matrix.length === 1){
            let arr = new Set(matrix[0]);
    
            arr.has("1") ? max_length = 1 : max_length = 0
            return max_length;
        }
    
        for(let i = 0; i < matrix.length; i++){
            for (let j = 0; j < matrix[0].length; j++){
                if(matrix[i][j] === "1"){
                    cur_length = find_max(matrix,2,j,i);
                    max_length = Math.max(cur_length,max_length);
                }
            }
        }
        return max_length * max_length;
    };
    
    function find_max(matrix,newSquerSize,x,y){
        let i = x;
        let j = y;
    
        if(x + newSquerSize > matrix.length || y + newSquerSize > matrix.length){
            return newSquerSize - 1;
        }
        while(j < y + newSquerSize && j < matrix.length){
            while(i < x + newSquerSize && i < matrix.length){
                console.log(j,matrix[j][i])
                if(matrix[j][i] === "0") //here where it doesnt iterate through j = 2
                    return newSquerSize - 1;
                ++i;
            }
            ++j;
        }
        return find_max(matrix,++newSquerSize,y);
    }

解决方法

跳过2的原因的第一个猜测是j增加了两次。在这种情况下,这意味着在j的下一次迭代中,我没有立即跳过while循环 (即i >= x + newSquerSize || i >= matrix.length

由于要遍历正方形的线/列,是否不应该将i索引重置为起始值?

我确实尝试在该循环之前添加一个i = x;,结果确实是所述的4。

while (j < y + newSquerSize && j < matrix.length) 
{
  i = x;  // Add this line 
  while (i < x + newSquerSize && i < matrix.length) {
    console.log(j,i,matrix[j][i]);
    if (matrix[j][i] === "0")
      return newSquerSize - 1;
    ++i;
  }
  ++j;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。