leetcode 200. 岛屿的个数 javascript

这道题考察的是图的深度优先遍历,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;
};

你可能感兴趣的:(leetcode 200. 岛屿的个数 javascript)