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的位置赋9int 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);}
};