代码随想录算法训练营第三十七天 | 738. 单调递增的数字、968. 监控二叉树

738. 单调递增的数字

 

视频讲解

主要思路:

后序遍历,每当遇到前一位大于后一位时,前一位-1,后一位赋为9

易错点:

(1)flag初始值赋为s.size(),应对1234这种情况,根本不会进入第二个循环

(2)flag用于记录前一位大于后一位时,前一位-1,flag与其之后都在第二个循环中赋为9

代码实现:

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string s = to_string(n);
        int flag = s.size();    //将flag定为s.size()是为了应对1234这种本来就满足题意情况,对应第二个循环,根本没有进入就直接退出
        for(int i = s.size() - 1; i >= 1; i--) {
            if(s[i - 1] > s[i]) {   //如果当前小于前一位,则将前一位-1,用flag记录当前位置,在下一个循环中flag(包括flag位置都要设为9)
                s[i - 1]--;
                flag = i;
            }
        }
        for(int i = flag; i < s.size(); i++) {
            s[i] = '9';
        }
        return stoi(s);
    }
};

968. 监控二叉树

视频讲解

主要思路:

(1)贪心:只要一个节点安装摄像头,那么它的叶子节点与父节点都会被覆盖,所以在叶子节点的父节点安装摄像头,且每隔两个空节点放一个摄像头

(2)二叉树节点状态:

0:无覆盖

1:有摄像头

2:有覆盖

易错点:

(1)空节点:状态为2

(2)有4种安装情况

代码随想录算法训练营第三十七天 | 738. 单调递增的数字、968. 监控二叉树_第1张图片

 

代码实现:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int result;
    int traversal(TreeNode* root) {
        if(root == nullptr) return 2;   //递归终止条件是遍历到空节点,空节点状态定义为2,有覆盖

        int left = traversal(root -> left); //采用后序遍历,左右中
        int right = traversal(root -> right);

        if(!left || !right) {   //第一种情况,叶子结点有一个是0,无覆盖,根节点则必须装一个摄像头
            result++;
            return 1;
        }
        if(left == 1 || right == 1) {   //第二种情况,叶子结点有一个是1,安装了摄像头,根节点就会被覆盖
            return 2;
        }
        if(left == 2 && right == 2) {   //第三种情况,叶子结点都是2,有覆盖,则当前根节点暂时不会被覆盖
            return 0;
        }
        return -1;
    }
    int minCameraCover(TreeNode* root) {
        if(!traversal(root)) result++;  //第四种情况比较特殊,属于不得不重复覆盖的情况
        return result;
    }   
};

你可能感兴趣的:(算法训练营,算法,leetcode)