【代码随想录】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;
    }
};

相关推荐
会员源码网35 分钟前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing1 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader2 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱5 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng8976 小时前
水声匹配场定位原理及实验
算法
董董灿是个攻城狮18 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
AI软著研究员1 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱1 天前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者2 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶