题目:给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右),计算岛屿个数。
如:
输入:
grid = [
[1 1 0 0 0]
[0 1 0 1 1]
[0 0 0 1 1]
[0 0 0 0 0]
[0 0 1 1 1]
]
输出:3
原因:有三个岛屿,分别在左上角、中间右边、右下角
思路:利用暴力解法,循环每一个位置,在每一个位置时判断该位置是否为‘1’,若为‘1’,岛屿数量加一,进入dfs搜索,在dfs搜索中,将当前陆地‘1’变为0,并且判断旁边的位置是否为‘1’,若为‘1’,继续递归遍历。
代码:
function solve( grid ) {
// write code here
let col = grid.length
let row = grid[0].length
let result = 0
for (let i=0; i < col; i++) {
for (let j=0; j < row; j++) {
if (grid[i][j] == 1) {
result++
dfs(grid, i, j)
}
}
}
return result
}
function dfs(grid, i, j) {
grid[i][j] = 0
if (i-1 >= 0 && 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 (i+1 < grid.length && grid[i+1][j] ==1) {
dfs(grid, i+1, j)
}
if (j+1 < grid[0].length && grid[i][j+1] == 1) {
dfs(grid, i, j+1)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)