把数组排成最小的数(剑指offer-32)

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

题目解析

先设置一种比较优先级排序,优先级为:将比较的两个元素拼接的两种结果去比较大小,然后由他们的大小关系去比较所拼接元素的优先级。
eg:输入数组{12,321},首先比较12321和32112的大小,然后根据这个大小去拼接字符串

题目解答

import java.util.*;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        ArrayList<String> list = new ArrayList<>();
        for(int x:numbers){
            list.add(x+"");
        }
        list.sort((o1,o2)->{
            String a1 = o1+o2;
            String a2 = o2+o1;
            return a1.compareTo(a2);
        });
        StringBuilder result = new StringBuilder();
        for(String x:list){
            result.append(x);
        }
        return result.toString();
    }
}
posted @ 2020-07-07 21:54  10000_Hours  阅读(103)  评论(0编辑  收藏  举报