题解 | #岛屿数量#
岛屿数量
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+剪枝的做法。