思路1:
从前往后遍历,找到第一个出现降序的位置i,即 N_i > N_i+1,考虑到会出现连续相等的N_i,找到第一个N_i,使其-1.其后面的数都变为9。
算法过程:
边界:if N<10 直接返回N
i:记录从前往后遍历的下标
pre_equal_i:记录第一个跟当前数字相等的下标
代码
int monotoneIncreasingDigits(int N) {
if(N<10) return N;
//将N转化为字符串
string str_n = to_string(N);
int i=0;
int pre_equal_i = 0;
bool flag = false;
for(i=1;i<str_n.size();++i){
if(str_n[i] == str_n[i-1])
continue;
if(str_n[i] < str_n[i-1]){
str_n[pre_equal_i]-=1;
pre_equal_i+=1;
flag = true;
break;
}
pre_equal_i = i;
}
/*
for(;pre_equal_i<str_n.size();++pre_equal_i){
str_n[pre_equal_i] = '9';
}
*/
if(flag)
fill(str_n.begin()+pre_equal_i,str_n.end(),'9');
return stoi(str_n);
}