200. 岛屿数量
作者:LeetCode
链接:https://leetcode-cn.com/problems/number-of-islands/solution/dao-yu-shu-liang-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路:因为每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。所以可以用深度优先搜索,每到一个值为1的点,就说明遇到陆地了,此时岛屿数量加一,之后向四个方向做深度优先搜索,把所有值为1的点设置为0(避免重复统计陆地数量)。假如dfs过程中遇到值为0的点,直接返回,不再dfs
class Solution {//思路看笔记 public int numIslands(char[][] grid) { if (grid == null || grid.length == 0) { return 0; } int hang=grid.length; int lie=grid[0].length;//这里的是行,列数量 int sum=0; for(int i=0;i<hang;i++) for(int j=0;j<lie;j++) { if(grid[i][j]=='1') //遇到陆地,岛数量加一 sum++; dfs(grid,i,j);//通过深度优先搜索,找到当前陆地所在岛的全部节点,并且设置为0 } return sum; } public void dfs(char[][] grid,int hang,int lie)//这里的是下标 { if(hang<0||hang>=grid.length||lie<0||lie>=grid[0].length||grid[hang][lie]=='0') return;//过界,或者此点是海洋/已经被访问过,返回 grid[hang][lie]='0';//调用这个函数之前,i,j是1,所以才要设置为0 dfs(grid,hang-1,lie); dfs(grid,hang+1,lie); dfs(grid,hang,lie-1); dfs(grid,hang,lie+1); } }