题目链接:https://leetcode.com/problems/number-of-islands/
Given a 2d grid map of '1'
s (land) and '0'
s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
Example 1:
Input: 11110 11010 11000 00000 Output: 1
Example 2:
Input: 11000 11000 00100 00011 Output: 3
思路:
这道题与之前的一道题十分相似,传送门。
具体的思路就是广度优先遍历,然后标记出同一片岛屿的区域并把它记为True避免重复计算。
时间复杂度为O(m*n),空间复杂度也是O(m*n)。
AC 1ms beats100%:
class Solution {
public int numIslands(char[][] grid) {
if(grid.length==0||grid[0].length==0)
return 0;
int m=grid.length,n=grid[0].length,count=0;
boolean[][] isVisited=new boolean[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid[i][j]=='1'&&isVisited[i][j]==false){
count++;
helper(grid,isVisited,i,j);
}
}
}
return count;
}
public void helper(char[][] grid,boolean[][] isVisited,int i,int j){
if(i<0||i>=grid.length||j<0||j>=grid[0].length||grid[i][j]!='1'||isVisited[i][j]==true)
return;
isVisited[i][j]=true;
helper(grid,isVisited,i+1,j);
helper(grid,isVisited,i,j+1);
helper(grid,isVisited,i-1,j);
helper(grid,isVisited,i,j-1);
}
}