【代码随想录】day37

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


一、738单调递增的数字

写的无比复杂。。。。

cpp 复制代码
class Solution {
public:
    vector<int> getVec(int n) {
        vector<int> nums;
        while (n) {
            nums.push_back(n % 10);
            n /= 10;
        }
        reverse(nums.begin(), nums.end());
        return nums;       
    }

    int getNums(vector<int>& nums) {
        int num = 0;
        long flag = 1;
        for (int i = nums.size() - 1; i >= 0; i --) {
            num += nums[i] * flag;
            flag *= 10;
        }
        return num;
    }

    int monotoneIncreasingDigits(int n) {
        vector<int> nums = getVec(n);
        for (int i = 1; i < nums.size(); i ++) {
            if (nums[i] >= nums[i-1]) {
                continue;
            }
            if (i == 1) {
                nums[0] --;
                for (int j = i; j < nums.size(); j ++) {
                    nums[j] = 9;
                }
            }
            else {
                while (i > 0) {
                    if (nums[i] > nums[i-1]) {
                        break;
                    }
                    i --;
                }
                nums[i] --;
                for (int j = i + 1; j < nums.size(); j ++) {
                    nums[j] = 9;
                }
            }
        }
        return getNums(nums);
    }
};

优化版:

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

二、968监控二叉树

思路有的,但是写不出来。。。听完视频,原来思路也没有。

cpp 复制代码
class Solution {
public:
    int res;
    int traversal(TreeNode* cur) {
        if (cur == nullptr) {
            return 2;
        }
        int left = traversal(cur->left);
        int right = traversal(cur->right);
        if (left == 2 && right == 2) {
            return 0;
        }
        else if (left == 0 || right == 0) {
            res ++;
            return 1;
        }
        else if (left == 1 || right == 1) {
            return 2;
        }
        return -1;
    }

    int minCameraCover(TreeNode* root) {
        if (traversal(root) == 0) {
            res ++;
        }
        return res;
    }
};

相关推荐
智者知已应修善业5 小时前
【求中位数】2024-1-23
c语言·c++·经验分享·笔记·算法
地平线开发者6 小时前
PTQ 量化数值范围与优化
算法·自动驾驶
sali-tec6 小时前
C# 基于halcon的视觉工作流-章68 深度学习-对象检测
开发语言·算法·计算机视觉·重构·c#
测试人社区-小明6 小时前
智能弹性伸缩算法在测试环境中的实践与验证
人工智能·测试工具·算法·机器学习·金融·机器人·量子计算
罗西的思考7 小时前
【Agent】MemOS 源码笔记---(5)---记忆分类
人工智能·深度学习·算法
qq_4335545410 小时前
C++数位DP
c++·算法·图论
AshinGau10 小时前
Softmax 与 交叉熵损失
神经网络·算法
似水এ᭄往昔10 小时前
【C++】--AVL树的认识和实现
开发语言·数据结构·c++·算法·stl
栀秋66610 小时前
“无重复字符的最长子串”:从O(n²)哈希优化到滑动窗口封神,再到DP降维打击!
前端·javascript·算法
xhxxx10 小时前
不用 Set,只用两个布尔值:如何用标志位将矩阵置零的空间复杂度压到 O(1)
javascript·算法·面试