剑指offer第三十二题。
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路
比如题中给的例子:{3,32,321}
我们来看看,假如只有{3,32}那么3 < 32,但是332 > 323,所以需要将3和32调个位置才行。
也就是说,两两拼接比较一下,如果前者大于后者则交换,所以需要将数组按照这种规则进行重新的排序。
我的答案
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
| import java.util.*; public class Solution { public String PrintMinNumber(int [] numbers) { List<Integer> list = new ArrayList<>(); for(int temp:numbers){ list.add(temp); } String s = ""; Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { String s1 = o1+""+o2; String s2 = o2+""+o1; return s1.compareTo(s2); } }); StringBuilder sb = new StringBuilder(); for(int i:list){ sb.append(i); } return sb.toString(); } }
|