牛客Top200---岛屿数量(java)
Posted 小样5411
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客Top200---岛屿数量(java)相关的知识,希望对你有一定的参考价值。
题目
思路
1、深度优先遍历,遍历二维数组,当遇到’1’时,进行深度优先遍历,遍历这个’1’附近的’1’,直到附近都是0,则第一个岛屿就找到了,接下来继续找’1’,再深度优先遍历,遍历其附近是否有’1’,是则为岛屿一部分,直到附近没有1,跳出时,第二个岛屿就找到,继续找第三个和第四个
2、每次遍历完的’1’(岛屿)都置为’0’
代码
import java.util.*;
public class Solution {
/**
* 判断岛屿数量
* @param grid char字符型二维数组
* @return int整型
*/
public int solve (char[][] grid) {
int count = 0;//记录岛屿数量
//判空
if(grid == null || grid.length == 0){
return count;
}
int rows = grid.length;
int cols = grid[0].length;
//遍历岛屿
for(int i = 0 ; i < rows ; i++){
for(int j = 0 ; j < cols ; j++){
if(grid[i][j] == '1'){
count++;
dfs(grid,i,j,rows,cols);
}
}
}
return count;
}
// 每遇到'1'后, 开始向四个方向 递归搜索. 搜到'1'后变为'0',
// 因为相邻的属于一个island. 然后开始继续找下一个'1'
private void dfs(char[][] grid, int i, int j, int rows, int cols) {
//越界返回
if(i < 0 || i >= rows || j < 0 || j >= cols){
return;
}
//不是岛屿也返回
if(grid[i][j] != '1'){
return;
}
//如果是岛屿,则变为'0',属于相邻岛屿可以并一起
grid[i][j]='0';
//传过来的'1'(岛屿),看他附近有没有岛屿,递归搜索
dfs(grid,i-1,j,rows,cols);//左
dfs(grid,i+1,j,rows,cols);//右
dfs(grid,i,j-1,rows,cols);//上
dfs(grid,i,j+1,rows,cols);//下
}
}
以上是关于牛客Top200---岛屿数量(java)的主要内容,如果未能解决你的问题,请参考以下文章
精选力扣500题 第41题 LeetCode 200. 岛屿数量c++/java详细题解