题目描述:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: "102"
示例 2:
输入: [3,30,34,5,9]
输出: "3033459"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof
思路:本题可以通过将数字两两拼接成字符串,并对字符串之间进行比较排序
排序思路:如30和3的拼接,330 >303,为了得到更小的数字,要使30排在3的后面。
实现方式:重写Comparator(应用上述比较思路)
class Solution {
public String minNumber(int[] nums) {
int n = nums.length;
StringBuilder ans = new StringBuilder();
String[] strs = new String[n];
for(int i = 0; i < n; i++) {
strs[i] = String.valueOf(nums[i]);
}
Arrays.sort(strs, new Temp());
for(String str : strs) {
ans.append(str);
}
return ans.toString();
}
class Temp implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
if((o1 + o2).compareTo(o2 + o1) > 0) return 1;
else if((o1 + o2).compareTo(o2 + o1) == 0) return 0;
else return -1;
}
}
}