代码随想录算法训练营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;
    }
};
相关推荐
高山上有一只小老虎13 小时前
字符串字符匹配
java·算法
愚润求学13 小时前
【动态规划】专题完结,题单汇总
算法·leetcode·动态规划
MOONICK13 小时前
数据结构——哈希表
数据结构·哈希算法·散列表
林太白13 小时前
跟着TRAE SOLO学习两大搜索
前端·算法
ghie909014 小时前
图像去雾算法详解与MATLAB实现
开发语言·算法·matlab
云泽80814 小时前
从三路快排到内省排序:探索工业级排序算法的演进
算法·排序算法
weixin_4684668515 小时前
遗传算法求解TSP旅行商问题python代码实战
python·算法·算法优化·遗传算法·旅行商问题·智能优化·np问题
·白小白15 小时前
力扣(LeetCode) ——43.字符串相乘(C++)
c++·leetcode
FMRbpm15 小时前
链表5--------删除
数据结构·c++·算法·链表·新手入门
程序员buddha15 小时前
C语言操作符详解
java·c语言·算法