1、题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
2、代码实现
package com.baozi.offer;
/**
* 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
* 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
*
* @author BaoZi
* @create 2019-07-13-22:00
*/
public class Offer25 {
public static void main(String[] args) {
Offer25 offer25 = new Offer25();
int[] array = new int[]{3, 32, 321};
// String[] chars = new String[]{"c", "cb", "cba"};
String result = offer25.PrintMinNumber(array);
// String result1 = offer25.PrintMinNumber(chars);
System.out.println(result);
// System.out.println(result1);
}
public String PrintMinNumber(String[] numbers) {
if (numbers.length == 0 || numbers == null) {
return "";
}
int length = numbers.length;
String[] strs = new String[length];
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
strs[i] = numbers[i] + "";
}
//重写比较大小的方法
java.util.Arrays.sort(strs, new java.util.Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String s1 = o1 + o2;
String s2 = o2 + o1;
return s1.compareTo(s2);
}
});
for (int i = 0; i < length; i++) {
sb.append(strs[i]);
}
return sb.toString();
}
public String PrintMinNumber(int[] numbers) {
if (numbers.length == 0 || numbers == null) {
return "";
}
int length = numbers.length;
String[] strs = new String[length];
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
strs[i] = numbers[i] + "";
}
//重写比较大小的方法
java.util.Arrays.sort(strs, new java.util.Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String s1 = o1 + o2;
String s2 = o2 + o1;
return s1.compareTo(s2);
}
});
for (int i = 0; i < length; i++) {
sb.append(strs[i]);
}
return sb.toString();
}
}