mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-03 23:00:07 +08:00
82 lines
1.8 KiB
JavaScript
82 lines
1.8 KiB
JavaScript
/* Number of Islands
|
|
https://dev.to/rattanakchea/amazons-interview-question-count-island-21h6
|
|
Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
|
|
|
|
a two dimensional grid map
|
|
each element is going to represent a piece of land
|
|
1 is land,
|
|
0 is water
|
|
output a number which is the number of islands
|
|
|
|
Example 1:
|
|
Input:
|
|
11110
|
|
11010
|
|
11000
|
|
00000
|
|
|
|
Output: 1
|
|
|
|
Example 2:
|
|
Input:
|
|
11000
|
|
11000
|
|
00100
|
|
00011
|
|
|
|
Output: 3
|
|
|
|
I: two dimensional array
|
|
O: a single integer; total number of islands
|
|
|
|
Pseudocode:
|
|
OUTER FUNCTION
|
|
set count to 0
|
|
|
|
INNER FUNCTION - flood (col, row)
|
|
if the tile is water
|
|
return
|
|
make tile water(flood tile)
|
|
invoke flood on the neighbor coordinates
|
|
|
|
iterate over the matrix (col, row)
|
|
if the current element is a 1
|
|
increment count
|
|
invoke flood (coordinates for col and row)
|
|
|
|
Return the count
|
|
*/
|
|
|
|
const islands = (matrixGrid) => {
|
|
const matrix = matrixGrid
|
|
let counter = 0
|
|
|
|
const flood = (row, col) => {
|
|
if (row < 0 || col < 0) return // Off the map above or left
|
|
if (row >= matrix.length || col >= matrix[row].length) return // Off the map below or right
|
|
|
|
const tile = matrix[row][col]
|
|
if (tile !== '1') return
|
|
|
|
matrix[row][col] = '0'
|
|
|
|
flood(row + 1, col) // Down
|
|
flood(row - 1, col) // Up
|
|
flood(row, col + 1) // Right
|
|
flood(row, col - 1) // Left
|
|
}
|
|
|
|
for (let row = 0; row < matrix.length; row += 1) {
|
|
for (let col = 0; col < matrix[row].length; col += 1) {
|
|
const current = matrix[row][col]
|
|
if (current === '1') {
|
|
flood(row, col)
|
|
counter += 1
|
|
}
|
|
}
|
|
}
|
|
return counter
|
|
}
|
|
|
|
export { islands }
|