LC200 島嶼數量

2021-10-21 15:38:59 字數 2050 閱讀 6596

難度中等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...