所与の2Dは、 grid
から成る 0s
(ランド)と 1s
(水)。 島 の最大4方向に接続されているグループ 0s
と 、閉じた島は、 で囲まれた島完全(すべての左、上、右、下)であります 1s.
数を返し 、閉じた島々を。
例1:
入力:グリッド= [1,1,1,1,1,1,1,0]、[1,0,0,0,0,1,1,0]、[1,0,1,0、 1,1,1,0]、[1,0,0,0,0,1,0,1]、[1,1,1,1,1,1,1,0]] 出力:2 説明: それらは完全に水(1Sのグループ)に囲まれているので、グレーで島が閉じられています。
例2:
入力:グリッド= [0,0,1,0,0]、[0,1,0,1,0]、[0,1,1,1,0] 出力:1
例3:
入力:グリッド= [1,1,1,1,1,1,1]、 [1,0,0,0,0,0,1]、 [1,0,1,1,1,0、 1]、 [1,0,1,0,1,0,1]、 [1,0,1,1,1,0,1]、 [1,0,0,0,0,0,1] 、 [1,1,1,1,1,1,1]] 出力:2
制約:
1 <= grid.length, grid[0].length <= 100
0 <= grid[i][j] <=1
クラスソリューション{ 公共 のint closedIsland(INT [] []グリッド){ int型 M = grid.length。 INT、N =グリッド[0 ] .LENGTH。 int型のres = 0 ; 以下のために(INT I 0 =; I <M、I ++ ){ ため(INT J = 0であり、j <N; J ++ ){ 場合(グリッド[I] [J] == 0 && I == 0 || J == 0 || I == M - 1 || J == N - 1 )ヘルプ(I、J、グリッド)。 } } のために(INT I 0 =; I <M; iが++ ){ 用(INT ; N J <J = 0 J ++ ){ 場合(グリッド[I] [J] == 0 ){ RES ++ 。 ヘルプ(I、J、グリッド)。 } } } 戻りRES。 } 公共 ボイドヘルプ(INT R、INT C、INT [] []グリッド){ もし、(R> -1 && R <grid.length && C> -1 && C <グリッド[0] .LENGTH &&格子[R] [C] == 0)グリッド[R] [C] = 1 。 他の リターン; ヘルプ(R + 1 、C、グリッド)。 ヘルプ(R、C + 1 、グリッド)。 ヘルプ(R - 1 、C、グリッド)。 ヘルプ(R、C - 1 、グリッド)。 } }
その後、DFS、全境界領域0最初のセット、およびトラバースセットになると答えを得るために、次に0から1、0とエリアを追加する前に遭遇しました。