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

相关推荐
88号技师2 分钟前
2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码
人工智能·算法·matlab·优化算法
IT猿手3 分钟前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
青春男大3 分钟前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
88号技师3 分钟前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
Zer0_on6 分钟前
数据结构栈和队列
c语言·开发语言·数据结构
一只小bit7 分钟前
数据结构之栈,队列,树
c语言·开发语言·数据结构·c++
我要学编程(ಥ_ಥ)1 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
埃菲尔铁塔_CV算法1 小时前
FTT变换Matlab代码解释及应用场景
算法
许野平2 小时前
Rust: enum 和 i32 的区别和互换
python·算法·rust·enum·i32
chenziang12 小时前
leetcode hot100 合并区间
算法