给定一个整数数组,请将其重新排序,以构造最小值。
样例
给定 [3, 32, 321],通过将数组重新排序,可构造 6 个可能性数字:
3+32+321=332321
3+321+32=332132
32+3+321=323321
32+321+3=323213
321+3+32=321332
321+32+3=321323
其中,最小值为 321323,所以,将数组重新排序后,该数组变为 [321, 32, 3]。
挑战
在原数组上完成,不使用额外空间。
注意事项
The result may be very large, so you need to return a string instead of an integer.
public String minNumber(int[] nums) {
// write your code here
int n = nums.length;
if(n == 0) return "";
List<String> strs= new ArrayList<>();
for (int i = 0; i < n; i++) {
strs.add(String.valueOf(nums[i]));
}
Collections.sort(strs,new Comparator<String>(){
@Override
public int compare(String a, String b){
String ab = a.concat(b);
String ba = b.concat(a);
return ba.compareTo(ab);
}
});
String ans = "";
for (int i = n - 1; i >= 0; i--) {
ans = ans.concat(strs.get(i));
}
int i = 0;
while (i < n && ans.charAt(i) == '0')
i ++;
if (i == n) return "0";
return ans.substring(i);
}