【代码随想录二刷】Day37-贪心-Go
创始人
2024-05-31 10:34:08
0

代码随想录二刷Day37

今日任务

738.单调递增的数字
968.监控二叉树
语言:Go

738. 单调递增的数字

链接:https://leetcode.cn/problems/monotone-increasing-digits/

func monotoneIncreasingDigits(n int) int {tmp := strconv.Itoa(n)str := []byte(tmp) //要先转成byte形式,方便操作flag := len(str)for i := len(str) - 1; i > 0; i-- {if str[i] < str[i - 1] {flag = istr[i - 1]--;}}for i := flag; i < len(str); i++ {str[i] = '9'}res, _ := strconv.Atoi(string(str)) //将byte再转成string,方便操作return res
}

968. 监控二叉树

链接:https://leetcode.cn/problems/binary-tree-cameras/

  1. 明确遍历方式:从叶子节点开始寻找摄像头放置位置可以保证摄像头数量最少,所以用后序遍历
  2. 明确每个节点的3种状态:未被覆盖 / 有摄像头 / 被覆盖
  3. 明确当前节点左右孩子的3种情况:
    左右孩子都已被覆盖,说明当前节点未被覆盖,需要增加一个摄像头;
    左右孩子至少有一个未被覆盖,说明当前节点需要增加一个摄像头,保证左右孩子都被覆盖;
    左右孩子至少有一个有摄像头,说明当前节点已被覆盖;
  4. 明确根节点的状态:如果根节点未被覆盖,结果还要加1
/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/var res int//0-本节点无覆盖//1-本节点有摄像头//2-本节点有覆盖
func traversal(root *TreeNode) int {//空节点有覆盖if root == nil {return 2}left := traversal(root.Left) //左right := traversal(root.Right) //右//1.左右节点都有覆盖if left == 2 && right == 2 {return 0}//2.左右节点至少有一个没有被覆盖,本节点要放上摄像头if left == 0 || right == 0 {res++return 1}//3.左右节点至少有一个有摄像头if left == 1 || right == 1 {return 2}return -1
}func minCameraCover(root *TreeNode) int {res = 0rt := traversal(root) //还要判断下根节点是否有覆盖if rt == 0 {res++}return res
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...