剑指Offer------把数组排成最小的数

来源:互联网 发布:centos 桥接网络 编辑:程序博客网 时间:2024/06/05 17:45

题目描述

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

<分析>
先把整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接
排序规则如下:
若ab>ba 则a>b
若ab<ba 则a<b
若ab=ab 则a=b
解释说明:
比如"3"<"31" 但是"331">"313",所以要将两者拼接起来进行比较

import java.util.Arrays;import java.util.Comparator;/** *  * @author zy * @date 2017年10月5日 上午10:36:44 * @Decription 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321}, *             则打印出这三个数字能排成的最小数字为321323。 */public class Ex22 {public String PrintMinNumber(int[] numbers) {if (numbers == null || numbers.length == 0) {return "";}int len = numbers.length;String[] strings = new String[len];StringBuilder sb = new StringBuilder();for (int i = 0; i < strings.length; i++) {strings[i] = String.valueOf(numbers[i]);}Arrays.sort(strings, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {String c1 = o1+o2;String c2 = o2+o1;return c1.compareTo(c2);}});for (int i = 0; i < strings.length; i++) {sb.append(strings[i]);}return sb.toString();}}