難度中等1021
給你乙個由'1'
(陸地)和'0'
(水)組成的的二維網格,請你計算網格中島嶼的數量。
島嶼總是被水包圍,並且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連線形成。
此外,你可以假設該網格的四條邊均被水包圍。
示例 1:
輸入:grid = [
["1","1","1","1","0"],
["1","1","0","1","0"],
["1","1","0","0","0"],
["0","0","0","0","0"]
]輸出:1
詳細解析
class
solution
}//最後返回島嶼的數量
return count;
}//這個方法會把當前格仔以及他鄰近的為1的格仔都會置為1
public
void
dfs(
char
grid,
int i,
int j)
}
package com.nie.o3;
/* *
*@auth wenzhao
*@date 2021/3/8 21:23
*/public
class
lee200,,
,};private
boolean
visited;
private
int rows;
private
int cols;
private
char
grid;
public
intnumisland
(char
grid)
this
.visited =
newboolean
[rows]
[cols]
;int count =0;
this
.grid = grid;
for(
int i =
0; i < rows; i++)}
}return count;
}private
void
dfs(
int i,
int j)}}
private
boolean
inarea
(int x,
int y)
}
public
class
solution
cols = grid[0]
.length;
// 空地的數量
int spaces =0;
unionfind unionfind =
newunionfind
(rows * cols)
;int
directions =,}
;for
(int i =
0; i < rows; i++
)else}}
}}return unionfind.
getcount()
- spaces;
}private
intgetindex
(int i,
int j)
private
class
unionfind
public
unionfind
(int n)
}private
intfind
(int x)
return x;
}public
void
union
(int x,
int y)
parent[xroot]
= yroot;
count--;}
}}
200 島嶼數量
複雜度分析 時間複雜度 o m n 其中 m 和 n 分別為行數和列數。空間複雜度 最壞情況下為 o m n 此時整個網格均為陸地,深度優先搜尋的深度達到m n。class solution int numislands vector grid int cnt 0 for int i 0 i gri...
200 島嶼數量
leetcode 200.島嶼數量 島嶼另一種型別 求周長 leetcoed 463.島嶼的周長 廣度優先遍歷 bfs 深度優先遍歷 dfs 2.1 dfs 就是遇到乙個 1 遞迴下去繼續找 1 四周沒有 1 之後,逐層返回到上一層找四周剩餘的 1 本題不需要回溯 直接把 訪問過的標記即可 廣度優先...
200 島嶼數量
給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 grid 1 1 1 1 0 1 1 0 1 0 1 1 0 0 0 0 0 0 0...