剑指offer(二十五)之把数组排成最小的数

题目描述

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

思路分析:

    先将int类型的数组,转化为string类型数组,再利用 Arrays.sort(str,new compareMinNmber()),对str数组进行排序,排序的规则由compareMinNmber的方法compare来规定,其中compareMinNmber实现了Comparator(比较器)接口。之后再利用StringBuilder来进行字符数组元素的追加,最后再toString();

具体代码1:

<span style="font-family:SimSun;font-size:24px;">import java.util.ArrayList;
import java.util.Comparator;
import java.util.Arrays;
public class Solution {
    public String PrintMinNumber(int [] numbers) {
        int len=numbers.length;
        String[] str=new String[len];
        for(int i=0;i<len;i++){
            str[i]=String.valueOf(numbers[i]);
        }
        Arrays.sort(str,new compareMinNmber());
        StringBuilder sb=new StringBuilder();
        for(int j=0;j<len;j++){
            sb.append(str[j]);
        }
        return sb.toString();

    }
    
    class compareMinNmber implements Comparator<String>{
        @Override
        public int compare(String s1,String s2){
            return (s1+s2).compareTo(s2+s1);
        }
    }
}</span>

具体代码2

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
    public String PrintMinNumber(int [] numbers) {
        int n=numbers.length;
        String s="";
        ArrayList<Integer> list= new ArrayList<Integer>();

        for(int i=0;i<n;i++){
          list.add(numbers[i]);
        }
        
        Collections.sort(list, new Comparator<Integer>(){

        public int compare(Integer str1,Integer str2){
           String s1=str1+""+str2;
           String s2=str2+""+str1;
           return s1.compareTo(s2);
           }
        });

        for(int j:list){
           s+=j;
        }
        return s;
      }
}


你可能感兴趣的:(把数组排成最小的数,剑指offe)