leetcode 738 单调递增的数字 (贪心)

题目描述:

  给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。

题解:

  从数字的低位开始向高位遍历,如果低位大于次低位的话,就先不处理。否则从向高一位接一,然后这一位开始到最低位所有值赋为9。代码如下:

class Solution {
public:
    vector<int> get(int x)
    {
        vector<int> res;
        while(x)
        {
            res.push_back(x%10);
            x/=10;
        }
        reverse(res.begin(),res.end());
        return res;
    }
    int monotoneIncreasingDigits(int N) {
        vector<int> tmp = get(N);
        int len = tmp.size();
        
        for(int i=len-1;i>0;i--)
        {
            if(tmp[i] >= tmp[i-1]) continue;
            int k = i;
            for(k ;k<len;k++) tmp[k] = 9;

            tmp[i-1] --;
            int l = i - 1;
            while(l >= 0 && tmp[l] < 0)
            {
                tmp[l] = 9;
                if(l-1 >= 0) tmp[l-1]--;
                l--;
            }
            
        }

        int ans= 0;
        for(int i = 0;i < len ;i++)
        {
            ans = ans*10 + tmp[i];
        }
        return ans;
    }
};

 

posted @ 2020-05-18 10:43  猪突猛进!!!  阅读(200)  评论(0编辑  收藏  举报