Golang每日一练(leetDay0068) 二叉树右视图、岛屿数量

news/2024/10/24 6:27:31/

目录

199. 二叉树的右视图 Binarytree Right Side View  🌟🌟

200. 岛屿数量 Number-of-islands  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


199. 二叉树的右视图 Binarytree Right Side View

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

示例 2:

输入: [1,null,3]
输出: [1,3]

示例 3:

输入: []
输出: []

提示:

  • 二叉树的节点个数的范围是 [0,100]
  • -100 <= Node.val <= 100 

代码:

package mainimport "fmt"const null = -1 << 31type TreeNode struct {Val   intLeft  *TreeNodeRight *TreeNode
}func (root *TreeNode) RightSideView() []int {var res []intif root == nil {return res}queue := []*TreeNode{root}for len(queue) > 0 {n := len(queue)for i := 0; i < n; i++ {node := queue[i]if i == n-1 {res = append(res, node.Val)}if node.Left != nil {queue = append(queue, node.Left)}if node.Right != nil {queue = append(queue, node.Right)}}queue = queue[n:]}return res
}func buildTree(nums []int) *TreeNode {if len(nums) == 0 {return nil}root := &TreeNode{Val: nums[0]}Queue := []*TreeNode{root}idx := 1for idx < len(nums) {node := Queue[0]Queue = Queue[1:]if nums[idx] != null {node.Left = &TreeNode{Val: nums[idx]}Queue = append(Queue, node.Left)}idx++if idx < len(nums) && nums[idx] != null {node.Right = &TreeNode{Val: nums[idx]}Queue = append(Queue, node.Right)}idx++}return root
}func ArrayToString(arr []int) string {res := "["for i := 0; i < len(arr); i++ {res += fmt.Sprint(arr[i])if i != len(arr)-1 {res += ","}}return res + "]"
}func main() {nums := []int{1, 2, 3, null, 5, null, 4}root := buildTree(nums)fmt.Println(ArrayToString(root.RightSideView()))nums = []int{1, null, 3}root = buildTree(nums)fmt.Println(ArrayToString(root.RightSideView()))
}

输出:

[1,3,4]
[1,3]


200. 岛屿数量 Number-of-islands

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:grid = [["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]]
输出:1

示例 2:

输入:grid = [["1","1","0","0","0"],["1","1","0","0","0"],["0","0","1","0","0"],["0","0","0","1","1"]]
输出:3

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 300
  • grid[i][j] 的值为 '0' 或 '1'

代码:

package mainimport "fmt"func numIslands(grid [][]byte) int {// 迭代整个网格,遇到陆地时就进行 DFS 搜索,找到一个区域后计数器加一m, n := len(grid), len(grid[0])var count intfor i := 0; i < m; i++ {for j := 0; j < n; j++ {if grid[i][j] == '1' {count++dfs(grid, i, j, m, n)}}}return count
}// DFS 搜索函数,将所有和当前岛屿相邻的陆地都标记为已遍历
func dfs(grid [][]byte, i, j, m, n int) {// 避免越界if i < 0 || j < 0 || i >= m || j >= n || grid[i][j] == '0' {return}// 标记当前位置为已遍历grid[i][j] = '0'// DFS 搜索四周的陆地dfs(grid, i+1, j, m, n)dfs(grid, i-1, j, m, n)dfs(grid, i, j+1, m, n)dfs(grid, i, j-1, m, n)
}func main() {grid1 := [][]byte{{'1', '1', '1', '1', '0'},{'1', '1', '0', '1', '0'},{'1', '1', '0', '0', '0'},{'0', '0', '0', '0', '0'},}fmt.Println(numIslands(grid1))grid2 := [][]byte{{'1', '1', '0', '0', '0'},{'1', '1', '0', '0', '0'},{'0', '0', '1', '0', '0'},{'0', '0', '0', '1', '1'},}fmt.Println(numIslands(grid2))
}

输出:

1
3


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


http://www.ppmy.cn/news/69214.html

相关文章

【Unity】读写ProjectSettings、UserSettings、Library文件夹中的文件

【Unity】读写ProjectSettings、UserSettings、Library文件夹中的文件 AssetDatabase 类提供的 LoadAssetAtPath 方法和 CreateAsset 方法只能读写Assets、Packages文件夹中的资产&#xff0c;如果想要读写其他文件夹&#xff08;ProjectSettings、UserSettings、Library等&am…

logstash 的基础语法与使用

一、logstash安装与配置 1. 下载 下载地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 注&#xff1a;使用Logstatsh的版本号与elasticsearch版本号需要保持一致 2. 上传并解压 先上传到服务器 /home/software/ 下&#xff0c;然后解压&#xff0c;并…

vim强大的快捷键

文章目录 vim强大的快捷键&#xff08;必须在可视模式下完成&#xff09;光标移动&#xff08;上下左右移动&#xff09;行选中列选中复制粘贴剪切删除取消后悔取消跳到文件的末尾跳转到我呢见的开头保存并且退出vim编辑器自动补全自动格式化回到行首&#xff08;这一行的第一个…

5月14日第壹简报,星期日,农历三月廿五

5月14日第壹简报&#xff0c;星期日&#xff0c;农历三月廿五坚持阅读&#xff0c;静待花开1. 福布斯中国锂电产业链TOP100发布&#xff0c;宁德时代、赣锋锂业、比亚迪等入选。2. 平均降价84%&#xff01;山东、湖南、江西等多地骨科脊柱类耗材集采中选结果落地。3. 世界旅游组…

怎样能把两张照片拼成一张图片,5种工具分享

怎样能把两张照片拼成一张图片&#xff1f;图片拼合的应用场景是很多的。比如将几张相册中的照片拼成一张合影、将多个地图截图拼合在一起形成一个更大的区域地图、将多个漫画图像合并成一本漫画册等。这项技术可以方便地将多张图片整合为一张&#xff0c;节省时间和精力。 因此…

【开源项目】Disruptor框架介绍及快速入门

Disruptor框架简介 Disruptor框架内部核心的数据结构是Ring Buffer&#xff0c;Ring Buffer是一个环形的数组&#xff0c;Disruptor框架以Ring Buffer为核心实现了异步事件处理的高性能架构&#xff1b;JDK的BlockingQueue相信大家都用过&#xff0c;其是一个阻塞队列&#xf…

ios绘制渐变色图片

/** * 绘制渐变色的矩形UIImage * * param bounds UIImage的bounds * param colors 渐变色数组&#xff0c;可以设置两种颜色 * param gradientType 渐变的方式&#xff1a;0:水平渐变 1:竖直渐变 2:向下对角线渐变 3:向上对角线渐变 * * return 渐变色…

Mysten Labs宣布推出积极贡献者和早期支持者ACES计划

Mysten Labs宣布推出积极贡献者和早期支持者&#xff08;ACES&#xff0c;Active Contributors & Early Supporters&#xff09;计划。这是对进入Sui主网的社区成员所做努力的巨大认可。 如果您在5月3日Sui主网启动之前就加入Sui Discord&#xff0c;请于5月18日凌晨2点&a…