738. 单调递增的数字
中等
315
亚马逊
微软 Microsoft
字节跳动
当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。
给定一个整数 n
,返回 小于或等于 n
的最大数字,且数字呈 单调递增 。
示例 1:
输入: n = 10 输出: 9
示例 2:
输入: n = 1234 输出: 1234
示例 3:
输入: n = 332 输出: 299
提示:
0 <= n <= 109
class Solution {
public int monotoneIncreasingDigits(int n) {
String s = String.valueOf(n);
char[] chars=s.toCharArray();
int start = s.length();
for(int i=s.length()-2;i>=0;i--){
if(chars[i]>chars[i+1]){
chars[i]--;
start=i+1;
}
for(int j=start;j<s.length();j++){
chars[j]='9';
}
}
return Integer.parseInt(String.valueOf(chars));
}
}
这道题必须的背下来,转换语法
1.int 》 String : String s = String.valueOf(n);
2.String > charArray: char[] chars= s.toCharArray();
3.数组中 char 和 int 转换 char[j]='9';
4.char>string>int : Integer.parseInt(String.valueOf(chars))
在说思路:
贪心,只需要,从后往前,如果cur > cur+1, 则cur-1; 后面的全变成9
暴力算法:参考
class Solution {
private:
bool checkNum(int num) {
int max = 10;
while (num) {
int t = num % 10;
if (max >= t) max = t;
else return false;
num = num / 10;
}
return true;
}
public:
int monotoneIncreasingDigits(int N) {
for (int i = N; i > 0; i--) {
if (checkNum(i)) return i;
}
return 0;
}
};
如何求各个位数
while(int num){
num=num/10
}