Largest Number

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.

写个comparator 来排序,排序的依据是:对任意两个s1,s2,如果s1+s2 > s2+s1,则s1应该排在前面。例如: s1=5, s2=34, 534>345, 则5应该排在前面。再如,s1=30, s2=34, 3034 < 3430,那么34应该排在前面。

要注意写个comparator,与Merge K Sorted Lists 里面用min heap时用到的comparator一样。

public class Solution {
public String largestNumber(int[] num) {
String[] numStrings = new String[num.length];
for(int i = 0; i < num.length; i++) {
numStrings[i] = String.valueOf(num[i]);
}
Comparator<String> comp = new Comparator<String>() {
public int compare(String s1, String s2) {
return -(s1 + s2).compareTo(s2 + s1);
}
};
Arrays.sort(numStrings, comp);
StringBuilder sb = new StringBuilder();
for(String s : numStrings) {
if(!(s.equals("0") && sb.length() == 0)) {
sb.append(s);
}
}
return sb.length() > 0 ? sb.toString() : "0";
}
}


posted @ 2015-01-25 09:55  江南第一少  阅读(127)  评论(0)    收藏  举报