思路:从后向前遍历,如果当前数字比下一个数字大,就把当前数字-1,并把后面所有数字变成9;这样能保证递增且最大;
这里把数字转换成string方便循环修改;
int monotoneIncreasingDigits(int N)
{
if (N / 10 == 0)
return N;
string s = "";
int n = N;
//将数字转换成string
while (n)
{
s.insert(s.begin(), '0' + n % 10);
n /= 10;
}
int len = s.length();
//循环修改
for (int i = len - 2; i >= 0; i--)
{
if (s[i] > s[i + 1])
{
s[i]--;
for (int j = i + 1; j < len; j++)
{
s[j] = '9';
}
}
}
n = 0;
int i = 0;
//将string转换成数字
while (s[i] == '0')
i++;
for (; i < len; i++)
{
n = n * 10 + s[i] - '0';
}
return n;
}