# 24. \[matrix] Number of Islands

**200. Number of Islands**

**Medium**

20.2K

445

Companies

Given an `m x n` 2D binary grid `grid` which represents a map of `'1'`s (land) and `'0'`s (water), return *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.

**Example 1:**

```
Input: grid = [
  ["1","1","1","1","0"],
  ["1","1","0","1","0"],
  ["1","1","0","0","0"],
  ["0","0","0","0","0"]
]
Output: 1

```

**Example 2:**

```
Input: grid = [
  ["1","1","0","0","0"],
  ["1","1","0","0","0"],
  ["0","0","1","0","0"],
  ["0","0","0","1","1"]
]
Output: 3

```

**Constraints:**

* `m == grid.length`
* `n == grid[i].length`
* `1 <= m, n <= 300`
* `grid[i][j]` is `'0'` or `'1'`.

{% embed url="<https://leetcode.com/problems/number-of-islands/>" %}

```javascript
/**
 * @param {character[][]} grid
 * @return {number}
 */
var numIslands = function(grid) {
    const visited = new Array(grid.length);
    for (let i = 0; i < grid.length; i++) {
        visited[i] = new Array(grid[i].length).fill(0);
    }

    let cnt = 0;
    for (let i = 0; i < grid.length; i++) {
        for (let j = 0; j < grid[0].length; j++) {
            if (grid[i][j] == 0) continue;
            if (visited[i][j] == 1) continue;
            check(i, j, grid, visited);
            cnt++;
        }
    }
    return cnt;
};


function check(row, col, grid, visited) {
    if (row < 0) return;
    if (row >= grid.length) return;
    if (col < 0) return;
    if (col >= grid[0].length) return;
    if (visited[row][col] == 1) return;
    if (grid[row][col] == 0) return; 

    visited[row][col] = 1;
    check(row - 1, col, grid, visited);
    check(row + 1, col, grid, visited);
    check(row, col - 1, grid, visited);
    check(row, col + 1, grid, visited);
}
```
