题目链接:● 738.单调递增的数字
题目链接/文章讲解/视频讲解:代码随想录
这道题我们可以用两种方法,一种就是暴力,我们从这个数本身开始判断,然后逐渐减一,如果满足的话,就返回这个对应的值;
package daima;
import java.util.Scanner;
public class 单调递增的数字 {
static boolean checkNum(int num) {
int max = 10;
while(num > 0) {
int t = num % 10;
num /= 10;
if(max >= t) max = t;
else return false;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = n; i >= 0; i--) {
if(checkNum(i)) {
System.out.println(i);
break;
}
}
}
}
第二种情况我们使用贪心的方法;
class Solution {
public int monotoneIncreasingDigits(int n) {
String[] str = (n + "").split("");
int flag = str.length;
for(int i = str.length - 1; i > 0; i--) {
if(Integer.parseInt(str[i - 1]) > Integer.parseInt(str[i])) {
str[i - 1] = (Integer.parseInt(str[i - 1]) - 1) + "";
flag = i;
}
}
for(int i = flag; i < str.length; i++)
str[i] = "9";
String strRes ="";
return Integer.parseInt(String.join("",str));
}
}
下面的改进了一下
class Solution {
public int monotoneIncreasingDigits(int n) {
String s = String.valueOf(n);
char[] chars = s.toCharArray();
int flag = s.length();
for(int i = s.length() - 1; i > 0; i--) {
if(chars[i - 1] > chars[i])
{
chars[i - 1]--;
flag = i;
}
}
for(int i = flag; i < s.length(); i++)
chars[i] = '9';
return Integer.parseInt(String.valueOf(chars));
}
}
总结:
整形转为字符串形式————第一种方法:我们把一个整形的数转化为一个字符串型的时候我们可以直接加上"" 如n + "" 这样n就变为字符串形式的了;
第二种方法:使用库函数String.valueOf(n),这样n就由整形转换为字符串形式;
字符串转化为字符串数组————使用字符串库函数,split 如str.split("") 此时str由字符串转变为字符串数组;
字符数组转化为整数,可以直接使用库函数Integer.parseInt(String.valueOf(chars));
每日总结:昨天下午看来王道考研的计组视频,晚上背了一下单词,今天你上午背了一下单词,又写了一下两个题