题解 | #岛屿数量#

岛屿数量

https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    public int count=0;
    private void dfs(char[][] grid,boolean[][] visited,int x,int y,int x_max, int y_max){
        if(x<0||x>=x_max||y<0||y>=y_max){
            return;
        }
        else if(visited[x][y]){
            return;
        }
        else if(grid[x][y]=='0'){
            return;
        }else{
            //System.out.printf("(%d,%d) visited\n",x,y);
            visited[x][y]=true;
            dfs(grid,visited,x-1,y,x_max,y_max);
            dfs(grid,visited,x+1,y,x_max,y_max);
            dfs(grid,visited,x,y-1,x_max,y_max);
            dfs(grid,visited,x,y+1,x_max,y_max);
        }
    }
    public int solve (char[][] grid) {
        int x_max=grid.length,y_max=grid[0].length;
        boolean[][] visited= new boolean[x_max][y_max];
        for(int i=0;i<x_max;i++){
            for(int j=0;j<y_max;j++){
                if(!visited[i][j]){
                    //System.out.printf("try find island in(%d,%d)\n",i,j);
                    dfs(grid,visited,i,j,x_max,y_max);
                    if(visited[i][j]){
                        //System.out.printf("found island in(%d,%d)\n",i,j);
                        count++;
                    }
                }
            }
        }
        return count;
    }
}

用暴力DFS+剪枝的做法。

全部评论

相关推荐

点赞 评论 收藏
分享
05-26 09:07
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务