您的位置:首页 > 其它

《leetCode》:Largest Number

2016-03-24 20:20 423 查看

题目

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.


思路

找出组合中的最大数,最简单的思路就是:找出这些的全排列,然后取出最大值,但是这样的时间复杂度为n!。另外一种思路就是将这些数字对应的字符串进行排序(注意这里的排序并不是根据字符本身的比较进行排序,而是组合的排序),最后组合起来就可以了。

public String largestNumber(int[] nums) {
if(nums==null||nums.length<1){
return null;
}
//排序
int len=nums.length;
String [] strs=new String[len];
for(int i=0;i<len;i++){
strs[i]=Integer.toString(nums[i]);
}
Arrays.sort(strs, new Comparator<String>(){
@Override
public int compare(String str1, String str2) {
StringBuilder sb=new StringBuilder();
StringBuilder sb2=new StringBuilder();
sb.append(str1).append(str2);
sb2.append(str2).append(str1);
return sb.toString().compareTo(sb2.toString());
}

});
//将排序后的结果组合起来就好
if(strs[len-1].charAt(0)=='0'){//如果最高位都为0,则返回0
return "0";
}
StringBuffer sb=new StringBuffer();
for(int i=len-1;i>=0;i--){
sb.append(strs[i]);
}
return sb.toString();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: