【排序】【打卡99天】《剑指Offer》2刷:JZ45 把数组排成最小的数

1、题目描述

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

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

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

数据范围:

0<=len(numbers)<=100

2、算法分析

首先对整型数组中的元素转换成String字符串类型的数组元素。 然后对字符串数组中的元素进行两两拼接,然后排序比较。注意使用的是自定义排序。对字符串数组进行自定义排序后,然后对数组中的元素进行拼接。使用的是StringBuilder。

下面主要是比较这一块。使用的是

// 自定义排序数组中得元素。    
Arrays.sort(str,new Comparator<String>(){
            public int compare(String s1,String s2){
                String c1 = s1 + s2;
                String c2 = s2 + s1;
                return c1.compareTo(c2);
            }
        });

上面得相当于:
for (int i=0;i<numbers.length;i++){
    for (int j=i+1;j<numbers.length;j++){
         Long a=Long.valueOf(numbers[i]+""+numbers[j]);
         Long b=Long.valueOf(numbers[j]+""+numbers[i]);
            if(a>b){
                int temp=numbers[i];
                 numbers[i]=numbers[j];
                 numbers[j]=temp;
                 }
     }
}

先拼接数组中得元素,然后再近比较。

 a.compareTo(b)。

public int compare(int a,int b)

 a.compareTo(b):升序

 b.compareTo(a):降序

返回值为1时,也就是说 a的值大于b的值

返回-1时,a值小于b得值

返回值0非常特殊。返回0,表示不交换顺序,但表示两个元素相同

 

3、代码实现

import java.util.*;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        if(numbers == null || numbers.length == 0){
            return "";
        }
        int len = numbers.length;
        String[] str = new String[len];
        // 将整形数组得元素存储到字符串数组中
        for(int i = 0;i < numbers.length;i++){
            str[i] = String.valueOf(numbers[i]);
        }
        //对数组中得元素进行排序
        Arrays.sort(str,new Comparator<String>(){
            public int compare(String s1,String s2){
                String c1 = s1 + s2;
                String c2 = s2 + s1;
                // 
                return c1.compareTo(c2);
            }
        });
        // 最后返回得是拼接排序,然后再根据字符串进行拼接。
        StringBuilder sb = new StringBuilder();
        for(int i  = 0;i < str.length;i++){
            sb.append(str[i]);
        }
        return sb.toString();
    }
}

Guess you like

Origin blog.csdn.net/Sunshineoe/article/details/121453428