和力扣 200. 岛屿数量 相同

import java.util.*;


public class Solution {
    /**
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    public int solve (char[][] grid) {
        // write code here
        int count = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (grid[i][j] == '1') {    
                    count++;            //若出现 1,则代表这是一个岛屿
                    dfs(grid, i, j);    //若遍历过以后,这个区域都改为 2
                }
            }
        }
        return count;
    }
    
    public void dfs(char[][] grid, int r, int c) {
        if (!inArae(grid, r, c)) return;    //判断是否在区域内
        if (grid[r][c] != '1') return;      //如果这个格子不是岛屿(0 或 2),直接返回

        grid[r][c] = '2';   // 将格子标记为「已遍历过」

        // 访问上、下、左、右四个相邻结点
        dfs(grid, r - 1, c);
        dfs(grid, r + 1, c);
        dfs(grid, r, c - 1);
        dfs(grid, r, c + 1);
    }

    // 判断坐标 (r, c) 是否在网格中
    public boolean inArae(char[][] grid, int r, int c) {
        return 0 <= r && r < grid.length 
            && 0 <= c && c < grid[0].length;
    }
}