如何解决无法理解为什么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 举报,一经查实,本站将立刻删除。