题目:
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.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
分析:
class Solution {
public String largestNumber(int[] nums) {
//给定数字元素,组成最大的元素。考虑到数可能非常大,所以需要返回字符串表示。
//思路:巧妙利用String自身的compareTo方法,即对比两个字符串时,对比ab和ba的大小来决定返回结果
String [] strs=new String[nums.length];
//将数字变成String数组
for(int i=0;i<nums.length;i++){
strs[i]=String.valueOf(nums[i]);
}
//定义比较器
Comparator<String> comparator=new Comparator<String>(){
public int compare(String a,String b){
String ab=a+b;
String ba=b+a;
//默认升序
return ab.compareTo(ba);
}
};
//对数组进行排序
Arrays.sort(strs,comparator);
//判断最大是否为0,如果是则返回0
if(strs[nums.length-1].charAt(0)=='0') {
//说明只有0
return "0";
}
String res="";
for(int j=strs.length-1;j>=0;j--){
res+=strs[j];
}
return res;
}
}