题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
一开始自己没想到,便去看了别人的题解,没想到可以巧妙的使用比较器进行实现。
本题当中还有一点小的收获,就是之前知道在遍历集合的时候除了使用迭代器现在也可以使用另一种方法,只不过一直没有用过,这次终于尝试了下,并且StringBudiller来连接的效率要好于用String和StringBuffer,但是别忘记toString()
StringBuilder s = new StringBuilder();
for(String str : arrayList){
s.append(str);
}
return s.toString();
哈哈哈哈、题外话结束,上题目答案:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
public String PrintMinNumber(int [] numbers) {
if(numbers.length == 0)
return "";
ArrayList<String> arrayList= new ArrayList<>();
for(int j = 0; j < numbers.length; j++){
arrayList.add(String.valueOf(numbers[j]));
}
Collections.sort(arrayList, new Comparator<String>(){
@Override
public int compare(String s1, String s2){
String str1 = s1 + s2;
String str2 = s2 + s1;
return str1.compareTo(str2);
}
});
StringBuilder s = new StringBuilder();
for(String str : arrayList){
s.append(str);
}
return s.toString();
}
}