问题描述:
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: "102"
示例 2:
输入: [3,30,34,5,9]
输出: "3033459"
解题思路:
这题主要是排序的问题,不过排序的方式需要我们自己定义,我们可以先将数组转换位字符串数组,然后再对字符串进行排序。排序的规则:因为字符串的比较本身就是逐一比较的,所以我们只需要做一些改变即可,假设字符串x和y,当x+y>y+x
时x应该排在后面,相反则x应该排在前面。
代码实现:
import java.util.Arrays;
import java.util.Comparator;
public class t45把数组排成最小的数 {
public String minNumber(int[] nums) {
String[] strs = new String[nums.length];
for(int i=0; i<strs.length; i++) {
strs[i] = nums[i] + "";
}
MyComparator mycom = new MyComparator();
Arrays.sort(strs, mycom);
StringBuilder sb = new StringBuilder();
for(String str:strs) {
sb.append(str);
}
return sb.toString();
}
}
class MyComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
if((o1+o2).compareTo(o2+o1)>0) //o1+o2 > o2+o1
return 1;
else
return -1;
}
}
提交结果: