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

相关推荐
hn小菜鸡17 分钟前
LeetCode 377.组合总和IV
数据结构·算法·leetcode
Deepoch1 小时前
Deepoc 大模型:无人机行业的智能变革引擎
人工智能·科技·算法·ai·动态规划·无人机
heimeiyingwang9 天前
【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来
人工智能·深度学习·算法
时空自由民.9 天前
C++ 不同线程之间传值
开发语言·c++·算法
ai小鬼头9 天前
AIStarter开发者熊哥分享|低成本部署AI项目的实战经验
后端·算法·架构
小白菜3336669 天前
DAY 37 早停策略和模型权重的保存
人工智能·深度学习·算法
zeroporn9 天前
以玄幻小说方式打开深度学习词嵌入算法!! 使用Skip-gram来完成 Word2Vec 词嵌入(Embedding)
人工智能·深度学习·算法·自然语言处理·embedding·word2vec·skip-gram
亮亮爱刷题9 天前
飞往大厂梦之算法提升-7
数据结构·算法·leetcode·动态规划
_周游9 天前
【数据结构】_二叉树OJ第二弹(返回数组的遍历专题)
数据结构·算法
双叶8369 天前
(C语言)Map数组的实现(数据结构)(链表)(指针)
c语言·数据结构·c++·算法·链表·哈希算法