0
点赞
收藏
分享

微信扫一扫

再战leetcode (200.岛屿数量)

200.岛屿数量

题目描述

在这里插入图片描述

题解

java

class Solution {
    //利用深度递归解决,可以看图,并加记住这个模板,他可以解决岛屿中的问题,还有一题岛屿面积问题也是这个模板。
    public int numIslands(char[][] grid) {
        //定义一个表示岛屿数量的变量
        int count = 0;
        //这个两层for循环是用来遍历整张二维表格中所有的陆地
        //其中 i 表示行,j 表示列
        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);
                    //用来统计有多少岛屿,岛屿是由多个陆地组成的,概念不一样
                    count++;
                }
            }
        }
        //返回岛屿的数量
        return count;
    }

    public void dfs(char[][] grid, int i, int j) {
        //防止 i 和 j 越界,也就是防止超出岛屿(上下左右)的范围。特别注意当遍历到海洋的时候也退出循环
        if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == '0') {
            return;
        }
        //将遍历过的陆地改为海洋,防止重复遍历
        grid[i][j] = '0';
        //向下遍历
        dfs(grid, i + 1, j);
        //向上遍历
        dfs(grid, i - 1, j);
        //向右遍历
        dfs(grid, i, j + 1);
        //向左遍历
        dfs(grid, i, j - 1);
    }
}

go

func numIslands(grid [][]byte) int {
	var count int = 0
	for i := 0; i < len(grid); i++ {
		for j := 0; j < len(grid[0]); j++ {
			if grid[i][j] == '1' {
				dfs(grid, i, j)
				count++
			}
		}
	}
	return count
}

func dfs(grid [][]byte, i int, j int) {
	if i < 0 || j < 0 || i >= len(grid) || j >= len(grid[i]) || grid[i][j] == '0' {
		return
	}
	grid[i][j] = '0'

	dfs(grid, i+1, j)
	dfs(grid, i-1, j)
	dfs(grid, i, j+1)
	dfs(grid, i, j-1)
}

参考

岛屿类问题的通用解法、DFS 遍历框架

举报

相关推荐

0 条评论