27. 738.单调递增的数字,968.监控二叉树,贪心算法总结

cpp 复制代码
class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string strNum = to_string(n);
        // flag用来标记赋值9从哪里开始
        // 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行
        int flag = strNum.size();

        for(int i = strNum.size() - 1; i >= 1; i--){
            if(strNum[i] < strNum[i - 1]){
                strNum[i - 1]--;
                flag = i;
            }
        }

        for(int i = flag; i < strNum.size(); i++) strNum[i] = '9';
        return stoi(strNum);
    }
};
cpp 复制代码
//定义: 0:该节点无覆盖 1:本节点有摄像头 2:本节点有覆盖!!!
class Solution {
public:
    int minCameraCover(TreeNode* root) {
        int cnt = 0;
        if(traversal(root, cnt) == 0) cnt++; //注意还需要判断根节点是否有覆盖!!!
        return cnt;
    }

    int traversal(TreeNode* root, int& cnt){
        if(root == nullptr) return 2;

        int left = traversal(root->left, cnt);
        int right = traversal(root->right, cnt);

        if(left == 0 || right == 0) {cnt++; return 1;}
        else if(left == 1 || right == 1) return 2;
        else return 0;

        // 以下是错误的逻辑!!!
        // if(left == 1 || right == 1) return 2;
        // else if(left ==2 && right ==2) return 0;
        // else {cnt++; return 1;}
    }
};

贪心算法总结

代码随想录 (programmercarl.com)

相关推荐
民乐团扒谱机8 分钟前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
码匠许师傅16 分钟前
【C++ 面试真题】聊聊 C++ 的多继承与虚继承
开发语言·c++·面试
Nil2081 小时前
leetcode 160相交链表
算法·leetcode·链表
迷途之人不知返2 小时前
算法系列2:滑动窗口
算法
有点。2 小时前
C++认识数
开发语言·c++
Herbert_hwt2 小时前
C语言零基础入门:循环控制与数据类型详解
c语言·数据结构·算法
2023自学中2 小时前
Qt 简易聊天室(第二篇),单线程 改为 多线程,方便后续增加文件传输功能
c++·qt
晚风醉蝶3 小时前
1-6-插入排序-InsertionSort
java·数据结构·排序算法
Tyler_TXZ3 小时前
C++C语言之——二叉树
c语言·开发语言·数据结构·c++·二叉树
Tisfy4 小时前
LeetCode 3090.每个字符最多出现两次的最长子字符串:二重循环 / 滑动窗口
算法·leetcode·字符串·题解·模拟·双指针·滑动窗口