剑指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 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数