我正在尝试做Q.200。关于Leetcode的离岛数量问题。该问题的内容如下:
给出一个二维地图,分别是“ 1”(土地)和“ 0”(水),计算岛屿的数量。一个岛屿被水包围,是通过水平或垂直连接相邻的陆地而形成的。您可能会假设网格的所有四个边缘都被水包围了。
Example 1:
Input:
11110
11010
11000
00000
Output: 1
Example 2:
Input:
11000
11000
00100
00011
Output: 3
以下是我在JavaScript中的解决方案:
/**
* @param {character[][]} grid
* @return {number}
*/
var numIslands = function(grid) {
if (grid.length == 0) {
return 0;
}
var count = 0;
var z = new Array(grid[0].length).fill(0);
var visit = new Array(grid.length);
for (i = 0; i < visit.length; i++) {
visit[i] = z;
}
function traverse(x, y, grid, visit, count) {
var col = grid.length;
var row = grid[0].length;
if (x >= 0 && y >= 0 && x < row && y < col) {
visit[x][y] = 1;
} else {
return;
}
if (grid[x][y] != 1) {
return;
} else {
traverse(x + 1, y);
traverse(x - 1, y);
traverse(x, y + 1);
traverse(x, y - 1);
count++;
}
}
for (i = 0; i < grid.length; i++) {
for (j = 0; j < grid[0].length; j++) {
if (visit[i][j] == 0) {
traverse(i, j, grid, visit, count);
} else {
continue;
}
}
}
return count;
};
基本上,我要尝试的是在值是1时调用递归,在无处可走时(孤岛的末端)停止,然后将孤岛数增加1。我创建了一个0数组检查是否访问过该位置。如果通过for循环或递归访问它,则它变成1,否则它是0。
错误
Line 20 in solution.js
var col = grid.length;
TypeError: Cannot read property 'length' of undefined
有人可以帮我指出我的错误吗?我整个上午都在努力找出解决方案的问题。
最诚挚的问候。
答案 0 :(得分:0)
在第30-33行中,您发现以下内容似乎是错误的:
traverse(x + 1, y);
traverse(x - 1, y);
traverse(x, y + 1);
traverse(x, y - 1);
相反,您可以添加
traverse(x + 1, y, grid, visit, count);
traverse(x - 1, y, grid, visit, count);
traverse(x, y + 1, grid, visit, count);
traverse(x, y - 1, grid, visit, count);
答案 1 :(得分:0)
您应该检查遍历功能开始时是否访问过该节点。
if (x >= 0 && y >= 0 && x < row && y < col) {
//////////////////////
if (visit[x][y] == 1){
return;
}
//////////////////////
visit[x][y] = 1;
} else {
return;
}