剑指offer系列58---把数组排成最小的数

Posted noaman_wgs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer系列58---把数组排成最小的数相关的知识,希望对你有一定的参考价值。

【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
* 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
【思路】1 首先将整数数组转化成字符串数组str;
    2 写一个定制排序comparator,对str进行排序。排序后得到的结果321,32,3(<)
      排序规则:ab<ba a<b;
            ab>ba a>b;
            ab=ba a=b
    3 得到排序后结果。

****定制排序: int compare(T o1, T o2) :比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。

 1 package com.exe11.offer;
 2 
 3 import java.util.Arrays;
 4 import java.util.Comparator;
 5 
 6 /**
 7  * 【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
 8  *            例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
 9  * 【思路】1 首先将整数数组转化成字符串数组str;
10  *           2 写一个定制排序comparator,对str进行排序。排序后得到的结果321,32,3(<)
11  *             排序规则:ab<ba  a<b;
12  *                   ab>ba  a>b;
13  *                   ab=ba  a=b
14  *        3 得到排序后结果。
15  *             
16  * @author WGS
17  *
18  */
19 public class PrintMinNumberofArray {
20     public String PrintMinNumber(int [] numbers) {
21         if(numbers==null ||numbers.length<=0)
22             return null;
23         
24         StringBuilder sb=new StringBuilder();
25         String[] str=new String[numbers.length];
26         //1 转换
27         for(int i=0;i<numbers.length;i++){
28             str[i]=numbers[i]+"";
29         }
30         //2 写一个定制排序
31         Comparator com=new Comparator<String>(){
32             @Override
33             public int compare(String o1, String o2) {
34                 return (o1+o2).compareTo(o2+o1);
35             }            
36         };
37         //3 对str进行排序
38         Arrays.sort(str, com);
39         //4 得到排序后的数字
40         for(int i=0;i<str.length;i++){
41             sb.append(str[i]);
42         }    
43         return sb.toString();    
44     }
45     
46     public static void main(String[] args) {
47         PrintMinNumberofArray p=new PrintMinNumberofArray();
48         //int[] nums=new int[]{3,32,321};
49         int[] nums=new int[]{1,12,23,311};
50         String s=p.PrintMinNumber(nums);
51         System.out.println(s);
52     }
53 }

 

以上是关于剑指offer系列58---把数组排成最小的数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer系列——32.把数组排成最小的数

剑指 Offer 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数

剑指offer把数组排成最小的数

Java 剑指offer(45) 把数组排成最小的数

剑指offer 面试题33 把数组排成最小的数

剑指OFFER 把数组排成最小的数