题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
示例1
输入
[3,32,321]
返回值
"321323"

解题思路
自定义比较器-比较两个数拼接之后的大小来确定元素的位置
注意点:Collections.sort(list,comparator)中,比较器需要自己,但是比较器针对的是封装类,所以需要将int转换为包装类的list

Java代码

import java.util.*;

public class Solution {
//     public String PrintMinNumber(int [] numbers) {
//         String ans="";
//         if(numbers.length==0) return ans;
//         //quicksort(numbers,0,numbers.length);
//         MyComparator mycmp=new MyComparator();
//         List<Integer> list = new ArrayList<Integer>();
//         for (int i : numbers) {
//             list.add(i);
//         }
//         Collections.sort(list,mycmp);
//         StringBuilder sb = new StringBuilder();
//         for (Integer val : list) {
//             sb.append(val);
//         }
//         return sb.toString();
//     }
//     private class MyComparator implements Comparator<Integer> {
//         @Override
//         public int compare(Integer a, Integer b) {
//             String s1=String.valueOf(a);
//             String s2=String.valueOf(b);
//             String A=s1+s2;
//             String B=s2+s1;
//             return A.compareTo(B);
//         }
//     }
    public String PrintMinNumber(int [] numbers) {
        String ans="";
        if(numbers.length==0) return ans;
        //quicksort(numbers,0,numbers.length);
        List<Integer> list = new ArrayList<Integer>();
        for (int i : numbers) {
            list.add(i);
        }
        //比较器的数据类型需要为包装类
        Collections.sort(list,new Comparator<Integer>(){
            @Override
            public int compare(Integer a, Integer b) {
                String s1=String.valueOf(a);
                String s2=String.valueOf(b);
                String A=s1+s2;
                String B=s2+s1;
                return A.compareTo(B);
            }
        });
        StringBuilder sb = new StringBuilder();
        for (Integer val : list) {
            sb.append(val);
        }
        return sb.toString();
    }
}