LeetCode--200:岛屿数量(java)

原题链接

1.较为初级的解法(DFS)

       遍历地图上的所有格子,如果遇到 ‘1’ (陆地),则把这个 ‘1’(陆地)及其连通的 ‘1’(陆地)(这是一个递归的过程,只要还存在连通的 ‘1’ ,就一直炸) 全部变为 0,也就是采取沉岛策略,遇到一个陆地,就顺着陆地找出整个岛,把岛沉掉,一整个岛炸完了,就计数+ 1,最后返回总的计数即可。

//代码取自题解中Krahets的解法
//92%  83%
	public int numIslands(char[][] grid) {
        int isLands = 0;
        for(int i = 0; i < grid.length; i++) {
            for(int j = 0; j < grid[0].length; j++) {
                if(grid[i][j] == '1'){//如果这是陆地
                    dfs(grid, i, j);//就顺着这个陆地,把整个岛炸掉
                    isLands++;//炸一个岛,记一次数
                }
            }
        }
        return isLands;
    }
    private void dfs(char[][] grid, int i, int j){
    	//越界终止条件
        if(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == '0') return;
        grid[i][j] = '0';//炸掉这个陆地
        //以(i, j)为中心,四处漫延
        dfs(grid, i - 1, j);//上
        dfs(grid, i + 1, j);//下
        dfs(grid, i, j - 1);//左
        dfs(grid, i, j + 1);//右
    }
发布了24 篇原创文章 · 获赞 3 · 访问量 559

猜你喜欢

转载自blog.csdn.net/QinLaoDeMaChu/article/details/103903524