200. 島嶼數量
阿新 • • 發佈:2021-12-02
描述
給你一個由'1'(陸地)和 '0'(水)組成的的二維網格,請你計算網格中島嶼的數量。
島嶼總是被水包圍,並且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連線形成。
此外,你可以假設該網格的四條邊均被水包圍。
連結
200. 島嶼數量 - 力扣(LeetCode) (leetcode-cn.com)
解法:回溯法(思路比較清晰)
classSolution{ publicintnumIslands(char[][]grid){ intcount=0; int[][]mark=newint[grid.length][grid[0].length]; for(int[]c:mark){ Arrays.fill(c,0); }for(inti=0;i<grid.length;i++){ for(intj=0;j<grid[i].length;j++){ if(mark[i][j]==0&&grid[i][j]=='1'){ DFS(grid,i,j,mark); count++; } } } returncount; }
privatevoidDFS(char[][]grid,intx,inty,int[][]mark){ mark[x][y]=1; int[]dx={-1,1,0,0}; int[]dy={0,0,-1,1}; for(intk=0;k<4;k++){ intnewDx=dx[k]+x; intnewDy=dy[k]+y; if(newDx<0||newDx>=grid.length||newDy<0||newDy>=grid[newDx].length){ continue; } if(mark[newDx][newDy]==0&&grid[newDx][newDy]=='1'){ DFS(grid,newDx,newDy,mark); } } } }
可詳細參考