Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9]
, the largest formed number is 9534330
.
Note: The result may be very large, so you need to return a string instead of an integer.
思路: 这道题是sort下面的,说明这道题跟sort有关。主要问题就是排序规则,如何判定两个数,谁在前谁在后?答案就是,谁在前能让整个数更大,谁就应该在前,比如3,30,3在前就是330,30在前就是303,330>303,所以3应该在前,如此重写comparator,定义排序规则即可。
public class Solution {
public String largestNumber(int[] num) {
int n = num.length;
if (n < 1) return "";
String[] strs = new String[n];
for (int i = 0; i < n; i++) {
strs[i] = String.valueOf(num[i]);
}
Arrays.sort(strs, new Cmp());
String ans = "";
for (int i = n - 1; i >= 0; i--) {
ans = ans.concat(strs[i]);
}
int i = 0;
while (i < n && ans.charAt(i) == '0') {
i++;
}
if (i == n) return "0";
return ans.substring(i);
}
}
class Cmp implements Comparator<String>{
public int compare(String a, String b) {
String ab = a.concat(b);
String ba = b.concat(a);
int flag = 0;
for(int i = 0; i < ab.length() - 1 ; i++){
if(ab.charAt(i) > ba.charAt(i)){
flag = 1;
break;
}else if(ab.charAt(i) < ba.charAt(i)){
flag = -1;
break;
}else{
flag = 0;
}
}
return flag;
}
}