代码随想录算法训练营Day37 || leetCode 738.单调递增的数字 || 968.监控二叉树

738.单调递增的数字

理清楚思路就好写代码,只要前一位大于后一位,例如ab,那改变以后就为(a-1)9,所以纪录最靠前的那位大于下位的数减一,后面全部改为9

cpp 复制代码
class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string strNum = to_string(n);
        int flag = strNum.size();
        for (int i = flag-1; i >= 1; i--){
            if (strNum[i] < strNum[i-1]){
                flag = i;
                strNum[i-1]--;
            }
        }
        for (int i = flag; i < strNum.size();i++){
            strNum[i] = '9';
        }
        return stoi(strNum);
    }
};

968.监控二叉树

首先排除叶节点安装监控,所以然后情况分类,思路解决后代码就好写了

cpp 复制代码
class Solution {
private:
    int result;
    int traversal(TreeNode* cur) {

        // 空节点,该节点有覆盖
        if (cur == NULL) return 2;

        int left = traversal(cur->left);    // 左
        int right = traversal(cur->right);  // 右

        // 情况1
        // 左右节点都有覆盖
        if (left == 2 && right == 2) return 0;

        // 情况2
        // left == 0 && right == 0 左右节点无覆盖
        // left == 1 && right == 0 左节点有摄像头,右节点无覆盖
        // left == 0 && right == 1 左节点有无覆盖,右节点摄像头
        // left == 0 && right == 2 左节点无覆盖,右节点覆盖
        // left == 2 && right == 0 左节点覆盖,右节点无覆盖
        if (left == 0 || right == 0) {
            result++;
            return 1;
        }

        // 情况3
        // left == 1 && right == 2 左节点有摄像头,右节点有覆盖
        // left == 2 && right == 1 左节点有覆盖,右节点有摄像头
        // left == 1 && right == 1 左右节点都有摄像头
        // 其他情况前段代码均已覆盖
        if (left == 1 || right == 1) return 2;

        // 以上代码我没有使用else,主要是为了把各个分支条件展现出来,这样代码有助于读者理解
        // 这个 return -1 逻辑不会走到这里。
        return -1;
    }

public:
    int minCameraCover(TreeNode* root) {
        result = 0;
        // 情况4
        if (traversal(root) == 0) { // root 无覆盖
            result++;
        }
        return result;
    }
};
相关推荐
OPEN-F12 分钟前
C++并发编程:异步任务与线程池实战
开发语言·c++·算法
SelectDB技术团队21 分钟前
统一全文检索与 SQL 分析:Apache Doris 日志分析实践
大数据·数据结构·后端·python·全文检索·doris·日志分析
凉茶钱28 分钟前
【数据结构】计数排序
数据结构·算法·排序算法
_不会dp不改名_1 小时前
leetcode3875_构造奇偶一致的数组 I
leetcode
dtq04242 小时前
数据结构 - 线性表 - 双向链表
c语言·数据结构·学习
不正经学生6 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
毕竟是shy哥9 小时前
计算YOLO数据集中每个类的目标数
算法·yolo·机器学习
M78佐菲9 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
圣保罗的大教堂9 小时前
leetcode 1406. 石子游戏 III 困难
leetcode
晊晌_h10 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法