目录
738 单调递增的数字
设置变量idx来标记出现问题的数字的下标,并设置初始值为n的长度来避免1234改为1239的情况发生。
从数字n的低位开始进行遍历并判断,如果高位大于低位,说明此时不符题意,需要将高位减去1,并将idx标记为此时的下标,遍历结束后将idx开始往后的数字均置为9。
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string str = to_string(n);
int idx = str.size();//从idx往后全变成9,初始化为str.size(),避免如1234变成1239
for(int i = str.size() - 1;i >= 1;i--){
if(str[i - 1] > str[i]){//高位大于低位
str[i - 1]--;
idx = i;
}
}
for(int i = idx;i < str.size();i++)str[i] = '9';
return stoi(str);
}
};
时间复杂度O(logn)logn代表数字的位数
空间复杂度O(logn)