一、题目
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
二、解法
解题思路:
* 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。
* 排序规则如下:
* 若ab > ba 则 a > b,
* 若ab < ba 则 a < b,
* 若ab = ba 则 a = b;
* 解释说明:
* 比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较
1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Comparator; 4 public class Solution { 5 public String PrintMinNumber(int [] numbers) { 6 int n = numbers.length; 7 StringBuilder s = new StringBuilder();//新建SB对象 8 ArrayList<Integer> list = new ArrayList<Integer>();//存储数组用ArrayList 9 for(int i = 0 ; i < n; i++) 10 list.add(numbers[i]);//添加到list 11 Collections.sort(list,new Comparator<Integer>(){//list排序,实现Comparator接口 12 @Override 13 public int compare(Integer str1, Integer str2) { 14 String s1 = str1+""+str2; 15 String s2 = str2 + "" + str1; 16 return s1.compareTo(s2); 17 } 18 }); 19 for(int j : list) 20 s.append(j); 21 return s.toString(); 22 } 23 }