代码随想录——贪心算法22单调递增的数字
思路
显然本题要对数字按位处理,转化为字符串更好处理。
既然要尽可能的大,那么这个数从高位开始要尽可能地保持不变。
那么我们找到从高到低第一个满足 str[i]>str[i+1] 的位置,然后把 str[i]−- ,再把后面的位置都变成 9 即可
但是由于减小了 str[i] 以后,可能不满足 str[i−1]<=str[i] 了
所以要从低到高位遍历,设置变量idx,str[i-1]>str[i]了就更新idx=i,str[i-1]--,最后把idx及其之后的都为9
代码
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string str = to_string(n);
int idx = str.size();//这样初始化是防止第二个for循环在idx没有被赋值的情况下执行
for(int i=str.size()-1;i>0;i--){
if(str[i-1]>str[i]){
idx = i;
str[i-1]--;
}
}
for(int i=idx;i<str.size();i++){
str[i]='9';
}
return stoi(str);
}
};