leetcode刷题感悟第2天 最大数 (中等)
问题描述
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
代码
class Solution {
public String largestNumber(int[] nums) {
String[] h=new String[nums.length];
for(int i=0;i<nums.length;i++) h[i]=String.valueOf(nums[i]);
Arrays.sort(h,new Comparator<String>(){
@Override
public int compare(String a,String b){
if (a.charAt(0)!= b.charAt(0)) {
return b.charAt(0) - a.charAt(0);
}
String l1=a+b;
String l2=b+a;
return l2.compareTo(l1);
}
});
if(h[0].charAt(0)=='0') return "0";
StringBuilder sb=new StringBuilder();
for(String ky:h) sb.append(ky);
return sb.toString();
}
}
值得注意的:
1、Arrays.sort(int[] a)
这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。
2、Arrays.sort(int[] a, int fromIndex, int toIndex)
这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序哦!
3、public static void sort(T[] a,int fromIndex,int toIndex, Comparator c)
上面有一个拘束,就是排列顺序只能是从小到大,如果我们要从大到小,就要使用这种方式
重写comparator,用来比较两个字符串组合的大小比较。

浙公网安备 33010602011771号