738.单调递增的数字
题目
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
示例 1:
- 输入: N = 10
- 输出: 9
思考
这题刚看到时没想到要从后向前遍历,还一直傻傻地想着从前向后,发现越来越乱,本题有三个关键点需要注意:
1、将数字转化成string,方便遍历
2、从后向前遍历,用i和i-1的数比较,如果后一个数比前一个数小,那么前一个数--,注意这里很关键,一定要--;
3、设置flag,这里的flag是记录从该位置开始,向后的所有数都变成9,因为如果没有这个flag的话,例如1000这个数,本来答案是999,但会变成900
代码
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string tmp = to_string(n);
int flag = tmp.size();
for(int i = tmp.size() - 1; i >= 1; i--) {
if(tmp[i] < tmp[i-1]) {
flag = i;
tmp[i-1]--;
}
else continue;
}
for(int i = flag; i < tmp.size(); i++) {
tmp[i] = '9';
}
return stoi(tmp);
}
};