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

島嶼數量

給你一個由 ‘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%的用戶

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