岛屿的个数
2018-12-17 本文已影响3人
Sczlog
public class Solution {
/**
* @param grid: a boolean 2D matrix
* @return: an integer
*/
public int numIslands(boolean[][] grid) {
// write your code here
int sum = 0;
for(int x = 0;x<grid.length;x++){
for(int y = 0 ; y<grid[x].length;y++){
if(grid[x][y]){
sum++;
grid[x][y] = false;
removeSame(grid,x,y);
}
}
}
return sum;
}
public void removeSame(boolean[][] grid,int x, int y){
for(int i = x+1;i<grid.length;i++){
if(grid[i][y]){
grid[i][y] = false;
removeSame(grid,i,y);
}else{
break;
}
}
for(int i = x-1;i>=0;i--){
if(grid[i][y]){
grid[i][y] = false;
removeSame(grid,i,y);
}else{
break;
}
}
for(int i = y+1;i<grid[x].length;i++){
if(grid[x][i]){
grid[x][i] = false;
removeSame(grid,x,i);
}else{
break;
}
}
for(int i = y-1;i>=0;i--){
if(grid[x][i]){
grid[x][i] = false;
removeSame(grid,x,i);
}else{
break;
}
}
}
}
思路:搜索到陆地(1)以后向前后以及下方遍历直至搜到海(0),将搜索到的陆地全部置为0并且将岛屿数量+1。