Skip to main content

200.js

/** ------------------------------------------------------------------------------
*
* 200. Number of Islands
* Topics: Array, Depth-First Search, Breadth-First Search, Matrix
* https://leetcode.com/problems/number-of-islands/description/
*
------------------------------------------------------------------------------ */
/**
* @param {character[][]} grid
* @return {number}
*/
var numIslands = function (grid) {
if (!grid || grid.length === 0) return 0

const rows = grid.length
const cols = grid[0].length
let count = 0

const dfs = (r, c) => {
if (r < 0 || r >= rows || c < 0 || c >= cols || grid[r][c] === "0") {
return
}

grid[r][c] = "0"
dfs(r + 1, c)
dfs(r - 1, c)
dfs(r, c + 1)
dfs(r, c - 1)
}

for (let i = 0; i < rows; i++) {
for (let j = 0; j < cols; j++) {
if (grid[i][j] === "1") {
count++
dfs(i, j)
}
}
}

return count
}

console.log(
numIslands([
["1", "1", "1", "1", "0"],
["1", "1", "0", "1", "0"],
["1", "1", "0", "0", "0"],
["0", "0", "0", "0", "0"],
]),
)