• 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;
        }
    };
  • 相关阅读:
    数据导入和导出
    用户登陆案例
    SQLHelper
    把连接数据库的字符串放在配置文件中
    访问数据库
    SQL语句
    Django Tornado Flask
    Python 的协程
    面试 Better Call Soul
    mklink 解决VScode 扩展...Google迁移到 windows D盘
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12909209.html
Copyright © 2020-2023  润新知