题目
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
由题意得,我们需要对数字进行排序。排序方法:
- 两个字符串长度不等
- 以最小的字符串长度为循环结束条件
- 依次比较各个字符大小。将小的排在前面,大得往后面走即可
- 两个字符串长度相等
- 任意一个字符串长度为循环结束条件
- 依次比较各个字符大小。将小的排在前面,大得往后面走即可
- 如果循环终结他们,两个字符串相等就不做任何操作即可。
注意事项:
- 利用自带的sort函数。本题使用匿名内部类Comparator重写compare()方法
前一个参数 —— 后一个参数是:升序
后一个参数 —— 前一个参数是:降序
不做任何操作,默认不排序
AC代码
import java.util.ArrayList;
import java.util.Comparator;
public class Solution {
public String PrintMinNumber(int [] numbers) {
ArrayList<String> list = new ArrayList<String>();
for(int i = 0 ; i < numbers.length;i++) {
list.add(String.valueOf(numbers[i]));
}
list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int t = o2.length() > o1.length() ? o1.length() : o2.length();
for(int i = 0 ; i < t;i++) {
if(o1.charAt(i) != o2.charAt(i))
return o1.charAt(i) - o2.charAt(i);
}
if(o1.length() > o2.length())
return o2.length() - o1.length();
else
return o1.length() - o2.length();
}
});
String s = "";
for(int i = 0 ; i < list.size();i++) {
s += list.get(i);
}
//System.out.println(s);
return s;
}
}