DFS

最简单的一种方式就是遍历数组中的每一个值,如果是1就说明是岛屿,然后把它置为0或者其他的字符都可以,只要不是1就行,然后再遍历他的上下左右4个位置。如果是1,说明这两个岛屿是连着的,只能算是一个岛屿,我们还要把它置为0,然后再以它为中心遍历他的上下左右4个位置……。如果是0,就说明不是岛屿,就不在往他的上下左右4个位置遍历了。

每个位置只要是1,先要把它置为0,然后沿着他的上下左右4个方向继续遍历,执行同样的操作,要注意边界条件的判断。

function solve( grid ) {
  
  function dfs(i,j){
    //边界条件判断,不能越界
    if( i<0 || i>=grid.length )
      return;
    if( j<0 || j>=grid[i].length )
      return;
    if(grid[i][j] == '0')
      return;
    //把当前格子置为0,然后再从他的上下左右4个方向继续遍历
    grid[i][j] = '0';
    dfs(i-1,j);
    dfs(i+1,j);
    dfs(i,j-1);
    dfs(i,j+1);
  }
  
  if(grid.length == 0)//边界条件判断
    return 0;
  
  let count = 0;//岛屿个数
  
  for(let i=0; i<grid.length; i++){
    for(let j=0; j<grid[i].length; j++){
      //只有当前格子是1才开始计算
      if(grid[i][j]=='1'){
        count++;//如果当前格子是1,岛屿的数量加1
        dfs(i,j);//然后通过dfs把当前格子的上下左右4个位置为1的都要置为0,因为他们是连着一起的算一个岛屿,
      }
    }
  }
  
  return count;
}