レベル:
中
件名の説明:
2Dグリッドマップを考えると'1'
S(土地)と'0'
S(水)、島の数を数えます。島は水に囲まれ、水平方向または垂直方向に隣接するランドを接続することによって形成されています。あなたは、グリッドのすべての4つのエッジが全て水に囲まれていると仮定します。
例1:
Input:
11110
11010
11000
00000
Output: 1
例2:
Input:
11000
11000
00100
00011
Output: 3
アイデアの分析:
あなたが島と考えられている水平または1隣接する垂直限り、その後の島として、0に囲まれた1を、発生した場合、島の数を確認するには、島の2次元配列の数を見つけます。即ち、1横切るアレイを介して必要な非隣接配列1、ソリューションの数、トラバース中に遭遇全体の数であるように、すべての非マークに接続されている約1置きますオンデマンドソリューション。
コード:
public class Solution{
public int numIslands(char [][]grid){
if(grid==null||grid.length==0)
return 0;
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')
continue;
res++;
dfs(grid,i,j);
}
}
return res;
}
public void dfs(char [][]grid,int i,int j){
if(i<0||i==grid.length||j<0||j==grid[0].length)
return;
if(grid[i][j]=='1'){
grid[i][j]='0';
dfs(grid,i+1,j);
dfs(grid,i,j+1);
dfs(grid,i-1,j);
dfs(grid,i,j-1);
}
}
}