总结:
1.根据题意可知,每找到一个连通分量就是一个岛屿。所以可以使用循环访问所有的点,每找到一个未被访问且值为1的点就是一个连通分量,岛屿数就加1.找到一个岛屿后就使用深度优先搜索把岛上所有的点遍历一遍,标记为已访问。

import java.util.*;


public class Solution {
    /**
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    boolean[][] visited;
    public int solve (char[][] grid) {
        // write code here
        int rowNum = grid.length;
        int colNum = grid[0].length;
        visited = new boolean[rowNum][colNum];
        int num = 0;//岛屿数量
        for(int i=0;i<rowNum;i++)
            for(int j=0;j<colNum;j++){
                if((!visited[i][j])&&grid[i][j]=='1'){
                    dfs(grid,i,j,rowNum,colNum);
                    num++;
                }
            }
        return num;
    }
    public void dfs(char[][] grid,int i,int j,int rowNum,int colNum){
            visited[i][j]=true;
            if(j-1>=0 && grid[i][j-1]=='1'&&(!visited[i][j-1]))
                dfs(grid,i,j-1,rowNum,colNum);//向左找
            if(j+1<colNum && grid[i][j+1]=='1'&&(!visited[i][j+1]))
                dfs(grid,i,j+1,rowNum,colNum);//向右找
            if(i-1>=0 && grid[i-1][j]=='1'&&(!visited[i-1][j]))
                dfs(grid,i-1,j,rowNum,colNum);//向下找
            if(i+1<rowNum && grid[i+1][j]=='1'&&(!visited[i+1][j]))
                dfs(grid,i+1,j,rowNum,colNum);//向下找

    }
}