题目
难度:中等
类型:贪心
题意:遇到逆序,就将当前位减1,同时将后面的数全部置为9。循环判断检查前面是否产生了逆序。
class Solution {
public:
int monotoneIncreasingDigits(int N) {
if(N < 10) return N;
deque<int> num;
//将数字转换位数组形式
do{
num.push_front(N%10);
N /= 10;
}while(N);
//遇到逆序就将前一位数值减一,同时将后面的数字全置为9
for(int i = 0; i < num.size()-1; i++){
if(num[i] > num[i+1]){
num[i]--;
for(int j = i+1; j < num.size(); j++) num[j] = 9;
i = -1; //进入for循环后变为0 继续执行 因为332 这种情况 这次操作以后
//变为329 导致3和2逆序了 所以还要继续循环
}
}
int res = 0;
for(int i = 0; i < num.size(); i++) res = res*10 + num[i];
return res;
}
};