思路
- 做了大概15分钟,还是有点慢,并且思路不完全正确,根据运行结果更改才能过
- 将N转为string类型的,好做判断
- 判断单调递增的部分,跳过不用更改
- 当前位置不是递增,当前位-1,后面全改成9
- 这里是根据运行结果错误才发现的。因为改了当前位可能会导致前面不再符合单调递增,所以要从当前位置遍历回去,查看不是单调递增的位置,当前位=9,前一位-1
- 其实改完一次就可以break了,因为改一次就是最终结果了
- string转为int返回结果
代码
class Solution {
public:
int monotoneIncreasingDigits(int N) {
string str = to_string(N);
for(int i = 0; i+1 < str.size(); ++i){
if(str[i] <= str[i+1]) continue;
--str[i];
int saveI = i++;
while(i < str.size()){
str[i] = '9';
++i;
}
i = saveI;
while(i >= 1 && str[i] < str[i-1]){
str[i] = '9';
--str[i-1];
--i;
}
}
int ans = stoi(str);
return ans;
}
};