代码随想录刷题第37天

今天要和贪心算法说再见了。第一题是单调递增的数字https://leetcode.cn/problems/monotone-increasing-digits/,给出小于题目值的最大数,且该数的各位都要满足单调递增。从后向前遍历字符串,若不满足单调递增,则将前一位数字减一,同时将后续数字置为9。

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

    }
};

最后一题是监控二叉树https://leetcode.cn/problems/binary-tree-cameras/description/,用最小的摄像头数量监控二叉树的所有节点。首先确定应在叶子结点的父节点放置摄像头,再每次隔两个结点向上遍历,用不同状态记录所有节点情况,知道所有节点均被覆盖。很复杂的一道题,直接看的卡哥思路了。

class Solution {
public:
    int result;
    int traversal(TreeNode* cur){
        if (cur == NULL) return 2;
        int left = traversal(cur->left);
        int right = traversal(cur->right);
        if (left == 2 && right == 2) return 0;
        if (left == 0 || right == 0){
            result++;
            return 1;
        }
        if (left == 1 || right == 1) return 2;
        return -1;
    }
    int minCameraCover(TreeNode* root) {
        result = 0;
        if (traversal(root) == 0) result++;
        return result;

    }
};

刷完贪心,确实感觉没什么规律可循,有的很简单,有的又很难,不过能认真刷完一遍还是要给自己竖一个大拇指哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值