200. 島嶼數量
- 島嶼數量
難度中等574
給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網格,請你計算網格中島嶼的數量。
島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連接形成。
此外,你可以假設該網格的四條邊均被水包圍。
示例 1:
輸入: 11110 11010 11000 00000 輸出: 1
示例 2:
輸入: 11000 11000 00100 00011 輸出: 3 解釋: 每座島嶼只能由水平和/或豎直方向上相鄰的陸地連接而成。
dfs
/*
遍歷島嶼
a.當遇到1 將島嶼變成2 依次將連着的島嶼 上下左右都改變、
b.判斷上下界限就可以了。
time : O(M*N)
space O(1)
*/
public int numIslands(char[][] grid) {
int res = 0;
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(grid[i][j] == '1'){
res++;
dfs(grid,i,j);
}
}
}
return res;
}
private void dfs(char [][] grid,int i,int j){
if(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] != '1') return;
grid[i][j] = '2';
dfs(grid,i-1,j);
dfs(grid,i+1,j);
dfs(grid,i,j-1);
dfs(grid,i,j+1);
}