链接:https://leetcode.com/problems/monotone-increasing-digits/description/
Given a non-negative integer N
, find the largest number that is less than or equal to N
with monotone increasing digits.
(Recall that an integer has monotone increasing digits if and only if each pair of adjacent digits x
and y
satisfy x <= y
.)
Input: N = 10
Output: 9
Input: N = 1234
Output: 1234
Input: N = 332
Output: 299
Note: N
is an integer in the range [0, 10^9]
.
class Solution {
public:
// 对于一个字符串,要使得他尽可能大,因此从前面往后面进行遍历,找到第一个降低的位置
// 如152321,降低的位置是s[1]和s[2];而332,降低的位置是s[1]和s[2],本来是s[1]的位置需要减一,但是由于s[1]和他的前一位相同,因此需要将索引前移
int monotoneIncreasingDigits(int N) {
string str = to_string(N);
int mark = -1;
for (int i = 0; i < str.size()-1; i++) {
if (str[i] > str[i+1]) {
mark = i;
break;
}
}
// 如果前面的数字相同,进行前移
while (mark > 0 && str[mark] == str[mark-1]) {
mark--;
}
if (mark != -1) {
str[mark] -= 1;
for (int i = mark+1; i < str.size(); i++) str[i] = '9';
}
return stoi(str);
}
};
思路:贪心算法,具体看注释~