这道题考察的是图的深度优先遍历,DFS
首先loop图的每个节点,对于每个节点,判断当前的值是否是‘1’,是‘1’的话岛屿数+1,
并开始按照DFS进行 ‘右下左上‘的递归搜索,同时将搜索过的节点设成’0‘,意思是说,将已经记过数的岛屿消除在了图里
比如第一次遍历之后,
图会从原来的
11000
11000
00100
00011
变成
00000
00000
00100
00011
var dfs = function(grid, y, x){
//处理边界条件,并判断是否是’0‘
if(y < 0 || x < 0 || x > grid[0].length - 1 || y > grid.length - 1 || grid[y][x] === '0') return;
grid[y][x] = '0';
dfs(grid, y, x + 1);
dfs(grid, y + 1, x);
dfs(grid, y, x - 1);
dfs(grid, y - 1, x);
}
/**
* @param {character[][]} grid
* @return {number}
*/
var numIslands = function(grid) {
let count = 0;
for(let y = 0; y < grid.length; y ++){
for(let x = 0; x < grid[0].length; x ++){
if(grid[y][x] === '1'){
count ++;
dfs(grid, y, x);
}
}
}
return count;
};