剑指offer三十二之把数组排成最小的数

时间:2021-01-11 14:56:38

一、题目

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

二、思路

(1)将数组转换成将数组转换成ArrayList<String>

  (2)按照字典顺序排序

  (3)合并

三、代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; public class Solution {
public String PrintMinNumber(int[] numbers) {
ArrayList<String> arrayList = new ArrayList<String>(); //将数组转换成ArrayList<String>
for (int i = 0; i < numbers.length; i++) {
arrayList.add(String.valueOf(numbers[i]));
} //排序
Collections.sort(arrayList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String s1 = o1 + o2;
String s2 = o2 + o1;
return s1.compareTo(s2); //按照字典顺序排序
}
}); //合并
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < arrayList.size(); i++) {
stringBuffer.append(arrayList.get(i));
} //返回结果
return stringBuffer.toString();
} }

---------------------------------------------

参考链接:

https://www.nowcoder.com/questionTerminal/8fecd3f8ba334add803bf2a06af1b993