【代码随想录二刷】Day37-贪心-Go

news/2024/7/24 7:01:46 标签: golang, leetcode

代码随想录二刷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 = i
            str[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 = 0
    rt := traversal(root) //还要判断下根节点是否有覆盖
    if rt == 0 {
        res++
    }
    return res
}

http://www.niftyadmin.cn/n/135366.html

相关文章

代码随想录 动态规划 || 完全背包基础 518 377

Day38完全背包理论基础完全背包有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。完全背包和…

flutter engine 源码编译之iOS

1、gclient sync --verbose 没反应 或网络错误之类的执行下面命令 export http_proxyhttp://127.0.0.1:7890 export https_proxyhttp://127.0.0.1:7890 在主工程初始化engine: initWithPrecompiledDartBundle 创建 project 切换 engine 制定版本 2.0.2 (2.5.3 d3ea636dc5…

sum-check protocol

sumcheck是一个交互式证明协议&#xff0c;给定域F上的多元多项式g(x1,...,xv)g(x_1,...,x_v)g(x1​,...,xv​)&#xff0c;证明者Prover可以向验证者Verifier证明该多项式ggg的遍历求和值等于公开值HHH&#xff0c;即 H∑b1,b2,...,bv∈{0,1}vg(b1,b2,...,bv)H \sum_{b_1,b_2,…

超详细Xshell7免费版安装与连接虚拟机教程

一、下载Xshell 1、首先打开Xshell官网&#xff0c;首页官网地址为&#xff1a; Xshell官网首页地址 官网首页地址有时候会发生变动&#xff0c;若不能通过链接直接进入官网&#xff0c;则在浏览器搜索xshell---->点击下图所示红框处即可 2、进入首页后&#xff0c;点击免…

【3.9】RedisAOF日志、字符串、操作系统进程管理

4. 进程管理 进程、线程基础知识 什么是进程 我们编写的代码只是一个存储在硬盘的静态文件&#xff0c;通过编译后就会生成二进制可执行文件&#xff0c;当我们运行这个可执行文件后&#xff0c;它会被装载到内存中&#xff0c;接着 CPU 会执行程序中的每一条指令&#xff0c;…

序章 高质量C/C++

一、文件结构避免头文件被重复引用&#xff0c;用 #pragma once 进行预处理用 <> 引用标注库头文件&#xff0c;用 "" 引用自定义库头文件C语言头文件只进行函数声明&#xff0c;不进行函数定义&#xff1b;C类的成员可在声明的同时定义二、程序版式每个类声明…

蓝桥杯刷题第六天

第一题&#xff1a;星期计算问题描述本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。已知今天是星期六&#xff0c;请问 20的22次方天后是星期几?注意用数字 1 到 7 表示星期一到星期日。运行限制最大运行时间&#xff1a;1s最…

jsp-----web应用与开发

jsp基本语法 jsp页面的基本结构 定义变量 <%! %> 表达式&#xff1a;变量、常量、表达式 <% %>代码块、程序段【jsp程序代码即jsp脚本】 <% %>注释 隐藏注释 不会显示在客户的浏览器上&#xff0c;即jsp页面运行后页面上看不到注释内容。同时也不会出…