Day31||● 738.单调递增的数字 ● 968.监控二叉树 ● 总结

● 738.单调递增的数字

第一遍做的时候其实已经想到了大致的思路就是用9去填充,但是遍历的方向是错的,导致忽略了332这种情况或者99999998这种情况,正确的遍历方式应该是从后向前遍历。注意stoi和to_string函数的使用,算是一个代码技巧。

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string s=to_string(n);
        int index=s.size();
        for(int i=s.size()-1;i>0;i--)
        {
            if(s[i]

● 968.监控二叉树 

这题其实算法复杂度上不是特别难,但是要考虑好每一种状态的情况!

/**
 * 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 minCameraCover(TreeNode* root) {
         result=0;
        if(traversal(root)==0)
        result++;

        return result;

    }
    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;

       if(left==0||right==0)
       {
           result++;
           return 1;
       }

       if(left==1||right==1)
       return 2;

       return -1;
    }

       



        
    
};

总结

贪心算法的难点在于其多变和灵活性,从局部最优推到整体最优!还是需要勤加练习!

你可能感兴趣的:(leetcode,算法,c++,贪心算法)