岛屿数量
是否独立完成:否
答案出处:题解
思路:首先遍历数组
- 当某个数组值为“1”,则表明找到一个岛或者一个岛的一部分了,接着我们需要知道该元素的上下左右,是否也都为“1”,于是我们要访问该元素的上下左右的元素,同理,我们也要对该元素的上下左右元素,做与之前相同的事。
- 当某个数组值为“0”,直接跳过下一个。
- 注意不要碰到数组的边界
class Solution {
public void dfs(char[][] grid,int r,int c){
int nr=grid.length;
int nc=grid[0].length;
if(r<0||c<0||r>=nr||c>=nc||grid[r][c]=='0') return; //排除四种情况,则退出,r和c显然不能小于0,这是左边界,
//再者r和c显然,不能大于等于他们的自己的最大值,这是右边界
grid[r][c]='0'; //走过的岛,全部置位0,表明已经访问过。
dfs(grid, r-1, c);
dfs(grid, r+1, c);
dfs(grid, r, c+1);
dfs(grid, r, c-1);
}
public int numIslands(char[][] grid) {
if(grid!=null&&grid.length==0) return 0; //首先排除grid为0的情况
int nr=grid.length; //竖着的的长度
int nc=grid[0].length; //横着的的长度
int count=0; //计数,总共有多少独立的岛屿
for(int r=0;r<nr;r++){//一行一行的遍历
for (int c=0;c<nc;c++){
if(grid[r][c]=='1') { //等于1的时候进入dfs函数
count++;
dfs(grid, r, c);
}
}
}
return count;
}
}
来源:CSDN
作者:qq_44466417
链接:https://blog.csdn.net/qq_44466417/article/details/104037598