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.
Analysis
- 把int[] 转换为String[]
- override String的compare方法
- sort String[]
- 把sort以后的string都append到一个string里return
注意:为什么不能直接用default的string sort? 考虑case:如果有数“30”和“3”,default认为“30”>“3”,新定义的comparator认为“30”<“3”,为我们需要的情况。
Code
public class Solution {
public String largestNumber(int[] nums) {
if(nums==null || nums.length==0) {return "";}
String[] str = new String[nums.length];
for(int i=0; i<nums.length; i++){
str[i]=nums[i]+"";
}
Comparator<String> comp = new Comparator<String>(){
@Override
public int compare(String str1, String str2){
String s1 = str1+str2;
String s2 = str2+str1;
return s1.compareTo(s2);
}
};
Arrays.sort(str, comp);
if (str[str.length-1].charAt(0)=="0"){return "0";}
StringBuilder sb = new StringBuilder();
for(int i=str.length-1; i>=0; i--){
sb.append(str[i]);
}
return sb.toString();
}
}
Note
- String1.compareTo(String2) tutorial
- 如果相等,返回0,如果string1大,返回>0,如果string2大,返回<0