46.把数组排成最小的数

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

例如输入数组 [3,32,321],则打印出这 3 个数字能排成的最小数字 321323。

数据范围:
数组长度 [0,500]。

样例:

输入:[3, 32, 321]
输出:321323

注意:

输出数字的格式为字符串。

代码:

class Solution {
    public String printMinNumber(int[] nums) {
        //将整数数组转换为字符串,方便拼接
        String[] s = new String[nums.length];
        for(int i = 0;i<nums.length;i++){
            //将每个数字转换为字符串
            s[i] = String.valueOf(nums[i]);
        }
        //自定义排序规则:若x+y>y+x,则x应该排在y后面(这里的+为拼接操作)
        //例如:"3"+"30"="330" > "30"+"3"="303",所以"30"应排在"3"前面
        Arrays.sort(s,new Comparator<String>(){
           public int compare(String x,String y){
               //比较两种拼接方式的字典序
               return (x+y).compareTo(y+x);
           }
        });
        //拼接排序后的字符串数组
        StringBuilder sb = new StringBuilder();
        for(int i = 0;i<s.length;i++)sb.append(s[i]);
        //返回最终拼接结果
        return sb.toString();
    }
}
posted @ 2025-05-29 09:24  回忆、少年  阅读(7)  评论(0)    收藏  举报