面试必考真题-算法篇 牛客网
dfs bfs 搜索
题目描述
给一个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);
}
}
}
参考/practice/0c9664d1554e466aa107d899418e814e?tpId=190&&tqId=35229&rp=1&ru=/ta/job-code-high-rd&qru=/ta/job-code-high-rd/question-ranking