代码随想录算法训练营第三十七天【贪心算法part06】 | 738.单调递增的数字

738.单调递增的数字

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

  1. 从后向前遍历,如果前一位数字小于后一位,则将前一位数字减一,并用flag标记当前数字2
  2. 从flag开始,把后面的所有数字都变成9

代码:

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string strNum = to_string(n);
        // flag用于标记赋值9从哪里开始
        // 如果前一位小于后一位,则将前一位-1
        int flag = strNum.size();
        for (int i = strNum.size()-1; i > 0; i--){
            if (strNum[i-1] > strNum[i]){
                flag = i;
                strNum[i-1]--;
            }
        }
        // 从flag开始,后面全部赋值为9
        for (int i = flag; i < strNum.size(); i++){
            strNum[i] = '9';
        }
        return stoi(strNum);
    }
};

你可能感兴趣的:(算法训练,算法,贪心算法)