leecode738.单调递增的数字
上来感觉就是程序设计基础的求每个位上的数的题,暴力枚举直接就超时了
class Solution {
private:
bool judge(int num){
int max=10;
while(num!=0){
int temp=num%10;
if(max<temp)
return false;
else
max=temp;
num/=10;
}
return true;
}
public:
int monotoneIncreasingDigits(int n) {
while(n){
if(judge(n))
return n;
else
n--;
}
return n;
}
};
换个思路先把每个位上的数字存起来,从后向前遍历,如果前一个大于后一个那么就当前的位数字变为9,前一个减1,想到这里的时候原本是想用数组来存放的,但是发现10003这个数字的结果最后是9999,但是10003在遍历时会变成09003,显然不符合要求,应该是09999,所以应该是要记录从哪一位开始,其后的数字全部变成9,所以改了一下算法,用字符串处理最后再转为数字刚好可以把开头的0也抹掉
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string numStr=to_string(n);
int start=numStr.size();
for(int i=numStr.size()-1;i>0;i--){
if(numStr[i-1]>numStr[i]){
start=i;
numStr[i-1]--;
}
}
for(int i=start;i<numStr.size();i++)
numStr[i]='9';
return stoi(numStr);
}
};