738. 单调递增的数字
当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。
给定一个整数 n
,返回 小于或等于 n
的最大数字,且数字呈 单调递增 。
示例 1:
输入: n = 10 输出: 9
示例 2:
输入: n = 1234 输出: 1234
示例 3:
输入: n = 332 输出: 299
提示:
0 <= n <= 109
-
//暴力法,分解数字--------->超时 class Solution { static bool check(int x){ int maxnum=10; while(x){ int t=x%10; if(maxnum>=t){ maxnum=t; } else{ return false; } x/=10; } return true; } public: int monotoneIncreasingDigits(int n) { for(int i=n;i>0;i--){ if(check(i)){ return i; } } return 0; } };
class Solution { public: int monotoneIncreasingDigits(int n) { //第一步将整数转成字符串,类似于高精度算法 string str=to_string(n); //定义一个标志符flag bool flag=false; //如果高位大于次高位,直接高位减一,次高位变9,后面都变9 //例如45357-->44999 //但是例如332-->329,顾后不顾前,随意需要从后往前在遍历一遍 for(int i=1;i<str.size();i++){ // if(str[i-1]>str[i]&&flag==false){ str[i-1]--; flag=true; } if(flag){ str[i]='9'; } } //从后往前在遍历一遍 //还是如果高位大于次高位,直接高位减一,次高位变9,后面都变9 for(int i=str.size()-1;i>0;i--){ if(str[i-1]>str[i]){ str[i]='9'; //不能一直减一,剪成负数了 if(str[i-1]!='0'){ str[i-1]--; } } } //stoi将字符串转整数 return stoi(str); } };