刷题刷题找工作!!!
题目链接
. - 力扣(LeetCode)
自己的思路
好难,看答案。
官方题解
突然发现其实不难,单纯地深度遍历就好了,遇到一个格子就加1,遇到遍历过的就返回。
我的疑问是什么确定我这个岛屿已经遍历完了进行下一个岛屿呢。
“噢解决了,在最初始的代码中对网格进行一个循环,遇到为1但未被遍历过就将其作为初始节点进入深搜。”
妙啊。
class Solution {int row, col;public void dfs(char[][] grid,int i, int j){if(!inArea(i, j)){return;}if(grid[i][j] == 2){return;}if(grid[i][j] == '0'){return;}// System.out.printf("i = %d, j = %d\n", i, j);grid[i][j] = 2;//将这个网格遍历理解为从二叉树到四叉树dfs(grid, i + 1, j);dfs(grid, i - 1, j);dfs(grid, i, j - 1);dfs(grid, i, j + 1);return;}public int numIslands(char[][] grid) {row = grid.length;col = grid[0].length;int num = 0;for(int i = 0; i < row; i++){for(int j = 0; j < col; j ++){if(grid[i][j] == '1'){//是陆地且未被拜访过dfs(grid, i, j);num++;}}}return num;}public boolean inArea(int i, int j){if( 0 <= i && i <= row - 1){if(0 <= j && j <= col - 1){return true;}}return false;}
}
笔者提示,一定要注意整个是个字符数组,不是Int型,因为这个答案会错误的。
