leetcode #200 岛屿数量

题目描述:

在这里插入图片描述
该题是leetcode的中等题,首先想到的是搜索,深度优先搜索和广度优先搜索都行。这里用的是深搜。思路:创建一个二维数组来标记是否已经搜过,遍历原始数组,如果是陆地’1’且没有被搜过,就开始深搜;深搜完后,岛屿数量加1即可。

代码如下:
class Solution {
    //表示深度搜索的上下左右四个方向
    static int[] dx = {-1, 1, 0, 0};
    static int[] dy = {0, 0, -1, 1};
    public int numIslands(char[][] grid) {
        if(grid.length <= 0 || grid[0].length <= 0){
            return 0;  //如果是[],直接返回0
        }
        int island_num = 0;  //小岛数量
        int row = grid.length;  //行数
        int col = grid[0].length;  //列数
        boolean[][] flag = new boolean[row][col];  //标记是否搜过
        for(int i = 0; i < row; i++){
            for(int j = 0; j < col; j++){
                flag[i][j] = false;  //初始化为false
            }
        }
        for(int i = 0; i < row; i++){
            for(int j = 0; j < col; j++){
                if(flag[i][j] == false && grid[i][j] == '1'){ //如果是陆地并且没有被搜过, 开始深度搜索
                    dfs(flag, grid, i, j, row, col);
                    island_num++; //深度搜索完一遍,小岛数量加1
                }
            }
        }
        return island_num;
    }
    //深搜的代码
    public static void dfs(boolean[][] flag, char[][] grid, int x, int y, int row, int col){
        flag[x][y] = true;
        for(int i = 0; i < 4; i++){ //从上下左右四个方向深搜
            int newX = x + dx[i];
            int newY = y + dy[i];
            if(newX < 0 || newX >= row || newY < 0 || newY >= col){
                continue;  //越界跳过不搜
            }
            if(flag[newX][newY] == false && grid[newX][newY] == '1'){
                dfs(flag, grid, newX, newY, row, col);
            }  
        }
    }
}
运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值