LeetCode Hot 100 No.200 岛屿数量

在这里插入图片描述
思路:
这是一个深度优先搜索的递归的过程。我们建立另一个和网格同样大小的数组 searched 来记录每一个元素是否被访问过。这个数组初始化默认是全0。设立一个sum变量,初始化为0。
我们遍历网格的每一个元素,对每一个元素,如果它是陆地,且没有被访问过,我们先将sum+1 ,然后将它所在的岛屿全部访问一遍。于此同时,将这个岛屿的searched 对应位置置为1,表示该岛屿已经访问过。
最后返回sum,即为岛屿的总数量。
对某个元素延申访问它所在的岛屿分为以下几个步骤:

  1. 判断该元素是否被访问过,如果是,直接return
  2. 如果它不在左边缘访问它左边的元素(递归)
  3. 如果它不在右边缘访问它左边的元素(递归)
  4. 如果它不在下边缘访问它下边的元素(递归)
  5. 如果它不在上边缘访问它上边的元素(递归)
class Solution {
    
    public int spread(char[][] grid, int[][] searched, int i, int j)
    {
        if(searched[i][j]!=0||grid[i][j]=='0')
            return 0;
        
        searched[i][j] = 1;
        if(i>0)
            spread(grid,searched,i-1,j);
        if(i<grid.length-1)
            spread(grid,searched,i+1,j);
        if(j>0)
            spread(grid,searched,i,j-1);
        if(j<grid[0].length-1)
            spread(grid,searched,i,j+1);
        return 1;
    }


    public int numIslands(char[][] grid) {
        int sum = 0;
        int[][] searched = new int[grid.length][grid[0].length];
        for(int i=0;i<grid.length;i++)
        {
            for(int j=0;j<grid[0].length;j++)
            {
                sum += spread(grid,searched,i,j);
            }
        }
        return sum;


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值