20.12.15 738. 单调递增的数字

题目

思路

  1. 做了大概15分钟,还是有点慢,并且思路不完全正确,根据运行结果更改才能过
  2. 将N转为string类型的,好做判断
  3. 判断单调递增的部分,跳过不用更改
  4. 当前位置不是递增,当前位-1,后面全改成9
  5. 这里是根据运行结果错误才发现的。因为改了当前位可能会导致前面不再符合单调递增,所以要从当前位置遍历回去,查看不是单调递增的位置,当前位=9,前一位-1
  6. 其实改完一次就可以break了,因为改一次就是最终结果了
  7. string转为int返回结果

代码

class Solution {
public:
    int monotoneIncreasingDigits(int N) {
        string str = to_string(N);
        for(int i = 0; i+1 < str.size(); ++i){
            if(str[i] <= str[i+1]) continue;
            --str[i];
            int saveI = i++;
            while(i < str.size()){
                str[i] = '9';
                ++i;
            } 
            i = saveI;
            while(i >= 1 && str[i] < str[i-1]){
                str[i] = '9';
                --str[i-1];
                --i;
            }
        }
        int ans = stoi(str);
        return ans;
    }
};
posted @ 2020-12-15 07:38  肥斯大只仔  阅读(35)  评论(0编辑  收藏  举报