赞
踩
题目描述
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。
题目分析:
同样的代码在牛客上会报栈溢出错误!!但是在leetcode上可以AC!!
同样的代码在牛客上会报栈溢出错误!!但是在leetcode上可以AC!!
同样的代码在牛客上会报栈溢出错误!!但是在leetcode上可以AC!!
利用dfs进行遍历,当找到陆地之后,向这个位置的上下左右继续寻找,如果依然找到陆地,则将矩阵中该位置代表陆地的’1’修改为’0’。这样,在之后的遍历中则不会再次计算该处陆地。
下面是Java代码
class Solution { public int numIslands(char[][] grid) { int lands = 0; int N = grid.length; int M = grid[0].length; for(int i = 0 ; i< N;i++){ for(int j = 0;j<M;j++){ if(grid[i][j] == '1'){ ++lands; dfs(grid,i,j); } } } return lands; } private void dfs(char[][] grid,int i , int j){ grid[i][j] ='0'; if(i-1>=0 && grid[i-1][j]=='1'){ dfs(grid,i-1,j); } if(i+1 < grid.length && grid[i+1][j] == '1'){ dfs(grid,i+1,j); } if(j-1>=0 && grid[i][j-1] == '1'){ dfs(grid,i,j-1); } if(j+1 < grid[0].length && grid[i][j+1] == '1'){ dfs(grid,i,j+1); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。