题解 | #岛屿数量#
岛屿数量
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+剪枝的做法。
上海得物信息集团有限公司公司福利 1254人发布
