欢迎查看和关注一个开源的个人学习计算机科学知识成长记录(前后端,数据结构与算法)
463 岛屿的周长
解题思路:
使用深度遍历 DFS ,出现两种情况:
遍历到的节点是网格边界节点,海洋的边界节点
- 海洋的边界节点 grid[r][c]===0
- 网格的边界节点 r<0||r>=grid.length||c<0||c>=grid[0].length
将遍历过的陆地节点标记为2 grid[r][c]===2,防止重复计算
var islandPerimeter = function(grid){
const n = grid.length;
const m = grid[0].length;
const dfs = (r,c)=>{
// 遇到海洋或者网格边界
if(r<0||r>=n||c<0||c>=m||grid[r][c]===0){
return 1;
}
if(grid[r][c]==2){
return 0;
}
grid[r][c] = 2;
return dfs(r-1,c)
+dfs(r+1,c)
+dfs(r,c-1)
+dfs(r,c+1);
}
let ans = 0;
for(let i=0;i<n;++i){
for(let j=0;j<m;++j){
if(grid[i][j]===1){
ans+=dfs(i,j);
}
}
}
return ans;
}
执行结果: 通过
执行用时: 160 ms , 在所有 JavaScript 提交中击败了 66.20% 的用户
内存消耗: 47 MB , 在所有 JavaScript 提交中击败了 32.40% 的用户
通过测试用例: 5833 / 5833