剑指offer:把数组排成最小的数(java版)

描述

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

示例1

输入:

[3,32,321]

返回值:

"321323"

解题思路

拿到这道题,我从给出的示例中想到了这样一种解法

先看三位数的大小,再看二位数的大小,最后看一位数的大小

然后按三位数两位数一位数的顺序拼起来

以下是错误示范。。。

import java.util.ArrayList;
import java.util.*;
public class Solution {
    public String PrintMinNumber(int [] numbers) {
        int[] a = new int[numbers.length];
        int[] b = new int[numbers.length];
        int[] c = new int[numbers.length];
        int j=0,k=0,l=0;
        for(int i = 0; i=100){
                a[j] = numbers[i];
                j++;
            }
            if(numbers[i]>=10&&numbers[i]<100){
                b[k] = numbers[i];
                k++;
            }
            if(numbers[i]<10&&numbers[i]>0){
                c[l] = numbers[i];
                l++;
            }
            if(j+k+l==numbers.length){
                break;
            }
        }
        Arrays.sort(a);
        Arrays.sort(b);
        Arrays.sort(c);
        String res="";
        for(int i=0;i

结果,答案没有全对。。。

因为不一定是三位数,也可能是四位数,五位数。。。。只能抱大神的大腿去了。。

方法

大神说:先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。

  排序规则如下:

 若ab > ba a > b

 若ab < ba a < b

  若ab = ba a = b

 * 解释说明:

 * 比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较

知识点复习:

Arrays.sort()的几种用法

  1. Arrays.sort(int[] a) :对一个数组的所有元素进行排序,并且是按从小到大的顺序。
  2. Arrays.sort(int[] a, int fromIndex, int toIndex) :对数组a的下标从fromIndex到toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序哦!
  3. public static void sort(T[] a,Comparator c):是一个用于用户自定义排序对象的方法。本题目中,重写了比较器,自定义了一个比较字符串的比较器~

compareTo() 方法

  1. 如果参数字符串等于此字符串,则返回值 0;
  2. 如果此字符串小于字符串参数,则返回一个小于 0 的值;
  3. 如果此字符串大于字符串参数,则返回一个大于 0 的值。

代码

import java.util.ArrayList;
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];
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < len; i++){
            str[i] = String.valueOf(numbers[i]);
        }
        Arrays.sort(str,new Comparator(){
            @Override
            public int compare(String s1, String s2) {
                String c1 = s1 + s2;
                String c2 = s2 + s1;
                return c1.compareTo(c2);
            }
        });
        for(int i = 0; i < len; i++){
            sb.append(str[i]);
        }
        return sb.toString();

    }
}

你可能感兴趣的:(java)