leetcode 179 题 最大数

leetcode 179 题 题目:最大数

题目描述:

给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

示例 1:   输入: [10,2]         输出: 210

示例 2:   输入: [3,30,34,5,9]    输出: 9534330

说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。

 

解决思路:

Arrays.sort()方法的使用,public static <T> void sort( T[]  a, Comparator<? super T>  c)

首先由static可以看出这是一个类方法,通过类Arrays来调用,其次,该方法有两个输入的参数,一个是需要排序的数组a,而且是使用了泛型,任意类型都可以进行排序;其次,一个参数是一个Comparator对象,该对象定义了对数组a进行排序所采用的规则,我们通常在使用Arrays.sort时,都是使用默认的比较器,即按照数值大小进行比较,但此题我们需要自定义一个比较器,要实现自定义的比较器就需要自己写一个类,该类实现了Comparator接口,并在类中重写Comparator中的方法compare,从而实现我们自定义的比较规则。仔细阅读此题,我们在对两个元素(例如a,b)进行排序时,应该按照如下的排序规则,将a放在前面,将b放在后面和将b放在前面,将a放在后面,比较这两种情况下哪一种排列所得的新数是较大的(如果a,b都是字符串的话,就比较容易了,字符串可以进行拼接,整数的话将会非常麻烦),我们的排序结果就是所得新数较大的情况下的排列方式。

综上所述,我们首先需要将需要排序的整数数组转成字符串数组(因为字符串的拼接十分方便),然后调用Arrays.sort()并传入我们自定义的比较器对象进行排序,将排序结果拼接成一个字符串返回,由于在测试时发现测试用例中有“00”这种连零、全零的测试用例,因此应该判断排序后的结果,如果第一个字符就是零,也就对应这种连零、全零的情况,应该直接返回“0”。

 

实现代码如下:

class Solution {
    //自定义比较器,implements Comparator<泛型>,实现该比较器接口,并重写比较器中的compare方法
    //从而让compare方法实现我们自己想要的排序逻辑
    private class myComparator implements Comparator<String>{
        @Override
        public int compare(String a, String b){
            String str1 = a + b;
            String str2 = b + a;
            
            return str2.compareTo(str1);
        }
    }
    
    public String largestNumber(int[] nums) {

        //首先将输入的整数数组转成字符串数组
        String[] strnums = new String[nums.length];
        int i = 0;
        for(int num : nums)
            strnums[i++] = String.valueOf(num);
        
        //调用Arrays.sort 对字符串数组进行排序,并传入我们自定义的比较器对象
        //从而实现自定义的排序逻辑
        Arrays.sort(strnums, new myComparator());
        
        //针对测试用例的特殊情况,单独处理
        if(strnums[0].equals("0"))
            return "0";
        
        //将排序结果拼接成一个字符串
        String result = new String();
        i = 0;
        while(i < strnums.length)
            result += strnums[i++];
        
        return result;
    }
}

 

全部评论

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务