golang力扣leetcode 1020.飞地的数量

简介: golang力扣leetcode 1020.飞地的数量

1020.飞地的数量

1020.飞地的数量

题解

BFS或者DFS,这题的思路就是把边框当作搜索的点,那么能搜索到的就是能走通的,即代码中的vis,进行遍历即可算出搜索不到的,就是答案了

代码

package main
func numEnclaves(grid [][]int) int {
  var dirs = []struct{ x, y int }{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}
  var vis = make([][]bool, len(grid))
  for i, v := range grid {
    vis[i] = make([]bool, len(v))
  }
  var dfs func(int, int)
  dfs = func(x, y int) {
    if x < 0 || x >= len(grid) || y < 0 || y >= len(grid[0]) || vis[x][y] || grid[x][y] == 0 {
      return
    }
    vis[x][y] = true
    for _, v := range dirs {
      dfs(x+v.x, y+v.y)
    }
  }
  for i := range grid {
    dfs(i, 0)
    dfs(i, len(grid[0])-1)
  }
  for i := 0; i <= len(grid[0])-1; i++ {
    dfs(0, i)
    dfs(len(grid)-1, i)
  }
  ans := 0
  for i, v := range grid {
    for j := range v {
      if grid[i][j] == 1 && vis[i][j] == false {
        ans++
      }
    }
  }
  return ans
}
目录
相关文章
|
19天前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
19 1
|
13天前
|
机器学习/深度学习 canal NoSQL
从C语言到C++_12(string相关OJ题)(leetcode力扣)
从C语言到C++_12(string相关OJ题)(leetcode力扣)
24 0
|
19天前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
9 0
|
19天前
|
Go 容器 SQL
【Golang Leetcode】总目录(Day1~100)
【Golang Leetcode】总目录(Day1~100)
477 1
【Golang Leetcode】总目录(Day1~100)
|
19天前
|
Go
golang力扣leetcode 494.目标和
golang力扣leetcode 494.目标和
32 0
|
19天前
|
Go
golang力扣leetcode 剑指Offer II 114. 外星文字典
golang力扣leetcode 剑指Offer II 114. 外星文字典
24 0
|
7天前
|
索引
【力扣刷题】两数求和、移动零、相交链表、反转链表
【力扣刷题】两数求和、移动零、相交链表、反转链表
15 2
【力扣刷题】两数求和、移动零、相交链表、反转链表
|
6天前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
15 0
|
7天前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
13 0
|
7天前
|
存储 算法 索引
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
18 1