1.题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
2.解题思路
方法1:
(1) 求出数组里面最大的数的位数,然后其他的数位数不够的进行补位
(2) 补位原则:如数组{3,32,321},最大位数为3,所以3进行补位变成333,补的两位为str[i]数组里面的最后一个charAt[str[i].length()-1];所以32补位变成322
(3) 对数组{333,322,321}进行从小到大排序,然后根据索引把字符串拼接即可得到答案。即从小到大排序为{321,322,333},这三个数对应原数组的{321,32,3},最后答案即为321323.
3.代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| import java.util.*;
public class Solution { public String PrintMinNumber(int [] numbers) { if(numbers.length<=0||numbers == null) return ""; Arrays.sort(numbers); int count = 0; int Max_ = numbers[numbers.length-1]; while(Max_>0) { count++; Max_ = Max_/10; } String str[] = new String[numbers.length];
for(int i = 0;i<numbers.length;i++){ str[i] = ""+numbers[i]; } for(int i = 0;i<numbers.length;i++){ String tmp ="" +str[i].charAt(str[i].length()-1); int len =str[i].length(); for(int j = 0;j<count-len;j++) { str[i] = str[i]+tmp; } } ArrayList<Integer> ss= new ArrayList<>(); String strcopy[] = str.clone(); Arrays.sort(str); for(int i = 0;i<numbers.length;i++){ for(int j = 0;j<numbers.length;j++){ if(str[i].equals(strcopy[j])){ ss.add(j); } } } String res = ""; for(int i = 0;i<numbers.length;i++){ res = res +numbers[ss.get(i)]; } return res; }
}
|