每天一道算法题(二十二)

岛屿数量

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:

11110
11010
11000
00000
输出: 1

示例 2:

输入:

11000
11000
00100
00011
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

采取遍历的方式,将所有连接的1的点都清零之后加1,之后继续遍历所有的点。

/**
 * @param {character[][]} grid
 * @return {number}
 */
var numIslands = function(grid) {
  var num = 0
  var x = grid.length
  if(x===0) return 0
  var y = grid[0].length
  for(var i =0;i<x;i++){
    for(var j=0;j<y;j++){
      if(grid[i][j] === '1'){ // 这样执行一次就会把与对应那个点相邻的1全部清零
        helper(grid,i,j,x,y)
        num++
      }
    }
  }
  return num
};
function helper(grid,i,j,x,y){ // 把1周围为1的数字全部改成0
  if(i<0 || j<0 || i+1>x || j+1>y || grid[i][j] === '0'){ // 找到为0的点就结束
    return
  }
  grid[i][j] = '0';
  helper(grid,i-1,j,x,y)
  helper(grid,i,j+1,x,y)
  helper(grid,i+1,j,x,y)
  helper(grid,i,j-1,x,y)
}

执行用时 :76 ms, 在所有 JavaScript 提交中击败了84.19%的用户
内存消耗 :36.4 MB, 在所有 JavaScript 提交中击败了100.00%的用户

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章