738. 单调递增的数字
✅做题思路or感想
少有的二刷小障碍
大体思路是:为了让后面的数单调递减,最简单的方法就是把后面小的数直接改成9,让前面的数-1(相当于直接借了一位给后面,借一位给后面是最简单的方法了)
当然这道题还得先要老生常谈的化为字符串,才能对上面的数字实施精准修改
class Solution {
public:
int monotoneIncreasingDigits(int n) {
//先转化成字符串再操作
string str = to_string(n);
//Index代表的是[Index, str.size() - 1]这一段的数都是不符合要求的数,则需要把这个区间都变成9(贪心)
//这里设置str.size()是有门道的
//如果有发生Index的值变化,则无所谓。若没有发生值变化,则区间[str.size(), str.size() - 1]是不存在的,故也不会发生转换9的操作
int Index = str.size();
for (int i = str.size() - 1; i > 0; i--) {
if (str[i - 1] > str[i]) {
Index = i;
//向前一位借1
str[i - 1]--;
}
}
//转化[Index, str.size() - 1]为9
for (int i = Index; i < str.size(); i++) {
str[i] = '9';
}
return stoi(str);
}
};