题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
深度优先解法:
class Solution {
public int numIslands(char[][] grid) {
int ans = 0;
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(grid[i][j] == '1'){
ans++;
dfs(grid,i,j);
j++;
}
}
}
return ans;
}
private int[] getNext(int i){
int[][] next = {{0,1},{1,0},{0,-1},{-1,0}};
return next[i];
}
private void dfs(char[][] grid,int x,int y){
grid[x][y] = '0';
//尝试不同方向
for(int i=0;i<4;i++){
int[] next = getNext(i);
int nextX = x+next[0];
int nextY = y+next[1];
//判断是否越界以及是否是陆地
if(nextX < 0 || nextX >= grid.length || nextY <0 || nextY >= grid[0].length || grid[nextX][nextY] == '0')
continue;
dfs(grid,nextX,nextY);
}
}
}
网友评论