给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

function numIslands(grid: string[][]): number {
    let count = 0
    const m = grid.length;
    const n = grid[0].length;
    //先二维遍历所有的 1,一旦遇到 1,就进行 DFS 遍历,遍历和这个 1 相邻的所有 1 ,并将他们给变为 0
    function DFS(i,j){
        // 边界条件判断 以及 是否为水('0')
        if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] === '0') {
            return;
        }
        //深度优先遍历当前的岛屿
        const land = grid[i][j]
        //先标记为 0,防止后续重复遍历
        grid[i][j]='0'
 
        if(land === '1') {
            //上
            DFS(i+1,j)
            //下
            DFS(i-1,j)
            //左
            DFS(i,j-1)
            //右
            DFS(i,j+1)
            
        }
        return 
    }
 
    for(let i = 0;i<grid.length;i++){
        for(let j = 0;j<grid[0].length;j++){
            if(grid[i][j] === '1'){
                count++
                DFS(i,j)
            }
        }
    }
    return count
};