2023.8.4
这题用暴力法会超时,我就没试了,采用了个挺巧的方法,为了方便需要先将整数n转换为字符串的形式,然后从后向前遍历,当两个数字非递增时,将前一个数字--,后一个数字的位置记录在index中,之后需要将这个index以后的数字全赋为9。 为了防止将不需要赋9的地方赋9,index需要初始化为超出这个字符串数组的索引,我初始化为一个最大整型值INT_MAX。最后的结果记得转回整数形式。 代码细节如下:
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string str = to_string(n);
//为了防止将不需要赋9的位置赋9
int index = INT_MAX;
for(int i=str.size()-1; i>0; i--)
{
if(str[i] < str[i-1])
{
str[i-1]--;
index = i;
}
}
for(int i=index; i<str.size(); i++)
{
str[i] = '9';
}
return stoi(str);
}
};