本题要求返回小于等于给定数字且从最高位到最低位呈单调递增的数值,需要从最低位向最高位遍历,如果最低位比其前一位小则若要使改变后数值最大需要将前一位作减一操作并记录下当前位,在遍历结束后将记录的当前位之后的所有位数值都置为9,此时返回的数值即为所求。
具体代码如下:
cpp
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string str=to_string(n);
int flag=str.length();
for(int i=flag-1;i>0;i--)
{
if(str[i]<str[i-1])
{
str[i-1]--;
flag=i;
}
}
for(int i=flag;i<str.length();i++)
{
str[i]='9';
}
return stoi(str);
}
};