题目描述
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
示例1
输入: N = 10 输出: 9
示例2
输入: N = 1234 输出: 1234
示例3
输入: N = 1234 输出: 1234
示例4
输入: N = 668841
输出: 667999
思路
先从尾到头遍历一遍,如果出现逆序,大的值减1,并记录最后一个逆序的位置i,然后把从i开始到末尾的数全部变9
实现
int monotoneIncreasingDigits(int N) {
if (N <= 10)
{
return N - 1;
}
int oriNum = N;
vector<int> data;
int res = 0;
while (N > 0) {
data.push_back(N % 10);
N /= 10;
}
reverse(data.begin(), data.end());
int index = data.size();
for (int i = data.size() - 1; i >= 1; i--)
{
if (data[i] < data[i - 1])
{
data[i - 1]--;
index = i;
}
}
if (index == data.size())
{
return oriNum;
} else {
for (int i = 0; i < index; i++) {
res = res * 10 + data[i];
}
for (int i = index; i < data.size(); i++) {
res = res * 10 + 9;
}
}
return res;
}