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,用来比较两个字符串组合的大小比较。

 

posted @ 2021-04-17 11:41  ash98  阅读(88)  评论(0)    收藏  举报