廣度優先遍歷(bfs),使用列表queue
模擬佇列
,isselected矩陣
儲存該點是否被遍歷過。時間複雜度o(m
∗n)o(m*n)
o(m∗n)
,空間複雜度o(m
對比題解區後,發現上述**有兩個缺點:
改進方法:
改進後的**為:
class
solution
:def
numislands
(self, grid: list[list[
str]])
->
int:
count =
0 queue = deque(
)for i in
range
(len
(grid)):
for j in
range
(len
(grid[0]
)):if grid[i]
[j]==
'1':
queue +=
[(i,j)
] count +=
1while queue:
x,y = queue.popleft(
)for k,m in
[(x-
1,y)
,(x+
1,y)
,(x,y-1)
,(x,y+1)
]:if0
<= k <
len(grid)
and0
<= m <
len(grid[0]
):if grid[k]
[m]==
'1':
grid[k]
[m]=
'0'(k,m)
)return count
時間複雜度o(m
∗n)o(m*n)
o(m∗n)
,空間複雜度o(m
本題的另外兩個解法是深度優先遍歷
和並查集
,詳見官方解答。
20 4 20 島嶼數量 中等 200
給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000...
LeetCode 200 島嶼數量 中等
給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000...
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...