解法一:
import java.util.Scanner;
import java.util.Arrays;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//通过字符串确定整数的位数
String str = in.next();
int num = str.length();
int x = Integer.parseInt(str);
int m,n;
int count = 0;
int[] a = new int[num];
int i = 0;
while(x != 0) {
m = x % 10;
if(m == 0) {
//统计0的个数
count++;
}
a[i++] = m;
x = x / 10;
}
Arrays.sort(a);
for(int j = 0; j < num; j++) {
//将第一个非0数和a[0] 进行交换
if(a[j] != 0) {
int temp = a[j];
a[j] = a[0];
a[0] = temp;
break;
}
}
//输出
for(int temp = 0; temp < num; temp++) {
System.out.print(a[temp]);
}
}
}
亮点: 当确定输入的数一定是整数时,可以通过字符串接收,然后使用字符串的 length() 函数确定其位数,然后视情况,是否使用 Integer.parseInt(String)
将字符串转换回整数。
//通过字符串确定整数的位数
String str = in.next();
int num = str.length();
int x = Integer.parseInt(str);
解法二:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine().trim();
//将字符串转换为字符数组
char[] digits = input.toCharArray();
Arrays.sort(digits); // 排序字符数组
// 找到第一个非零字符的位置
int firstNonZero = 0;
while (firstNonZero < digits.length && digits[firstNonZero] == '0') {
firstNonZero++;
//firstNonZero 也正好表示0的个数
}
// 构造最小数
StringBuilder result = new StringBuilder();
if (firstNonZero < digits.length) {
// 添加第一个非零字符
result.append(digits[firstNonZero]);
// 插入所有前导零
//表示从0开始,插入firstNonZero个字符
result.append(digits, 0, firstNonZero);
// 添加剩余字符
result.append(digits, firstNonZero + 1, digits.length - firstNonZero - 1);
}
System.out.println(result);
}
}
盲点: Arrays.sort(digits);
可以对对字符数组、字符串数组等进行排序,而不是只能对数字数组进行排序。