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