kying-star的博客

vuePress-theme-reco kying-star的博客    2023
kying-star的博客

Choose mode

  • dark
  • auto
  • light
主页
指北
语言学习
AI
前端
后端
算法
杂项
github

kying-star的博客

7

Article

0

Tag

主页
指北
语言学习
AI
前端
后端
算法
杂项
github
  • 岛屿问题
    • 200.岛屿数量
    • 1254.统计封闭岛屿的数目(中等)
    • 695. 岛屿的最大面积
    • 1905.统计子岛屿
    • 1020飞地的数量(中等)
  • 链表
  • 二叉树
  • 图
  • 前端常见算法
  • 活用数据结构问题
  • 查找算法
  • 排序算法
  • 数组

vuePress-theme-reco kying-star的博客    2023

岛屿问题

kying-star的博客

# 岛屿问题

岛屿系列算法问题是经典的面试高频题,虽然基本的问题并不难,但是这类问题有一些有意思的扩展,比如求子岛屿数量,求形状不同的岛屿数量等等,本文就来把这些问题一网打尽。

大体思路都是一套,用BFS或者DFS遍历整个图。

# 模版代码

/**
* @param {character[][]} grid
* @return {number}
*/
var numIslands = function (grid) {
 let [n, m] = [grid.length, grid[0].length]
 let count = 0;
 for (let i = 0; i < n; i++) {
   for (let j = 0; j < m; j++) {
     if (grid[i][j] == "1") {
       count += 1;
       dfs(grid, i, j)
     }
   }
 }
 return count
};

let dfs = (grid, i, j) => {
 let [n, m] = [grid.length, grid[0].length]
 if (i < 0 || j < 0 || i >= n || j >= m) {
   return
 }
 if (grid[i][j] == "0") {
   return
 }
 grid[i][j] = "0"
 dfs(grid, i - 1, j)
 dfs(grid, i + 1, j)
 dfs(grid, i, j - 1)
 dfs(grid, i, j + 1)
}