排序:剑指 Offer 45. 把数组排成最小的数

发布时间 2023-04-27 10:35:58作者: ZDREAMER
题目描述:

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

 

 

提示:

  0 < nums.length <= 100
说明:

  输出结果可能非常大,所以你需要返回一个字符串而不是整数
  拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

 

 注:+ 代表的是字符串拼接操作

根据以上规则,套用任何排序方法对 numsnums 执行排序即可。

 

 

class Solution{
    public String minNumber(int nums[]){
        String strs[] = new String[nums.length];
        for(int i=0;i<nums.length;i++){
            strs[i] = String.valueOf(nums[i]);
        }
        quickSort(strs,0,strs.length-1);
        StringBuilder res = new StringBuilder();
        for(String s:strs){
            res.append(s);
        }
        return res.toString();
    }
    void quickSort(String strs[],int l,int r){
        if(l>=r) return;
        int i=l,j=r;
        String tmp = strs[i];
        while(i<j){
            while((strs[j]+strs[l]).compareTo(strs[l]+strs[j])>=0&&i<j) j--;
            while((strs[i]+strs[l]).compareTo(strs[l]+strs[i])<=0&&i<j) i++;
            tmp = strs[i];
            strs[i] = strs[j];
            strs[j] = tmp;
        }
        strs[i] = strs[l];
        strs[l] = tmp;
        quickSort(strs,l,i-1);
        quickSort(strs,i+1,r);
    }
}