最大数

最大数

http://www.nowcoder.com/questionTerminal/fc897457408f4bbe9d3f87588f497729

刚开始犯得错误:直接将整型数组去从大到小去排序,以为就是正确结果。
用例: 10,1
我的输出会是101,而正确的是110,所以这很明显是错误的,考虑不周到。
那么直接用整型的就不行,那就另辟蹊径,用字符串形式进行排序。
但是排序的规则要如何定义呢?
我们知道,两个字符串之间比较大小的是比较每一个字符的大小,遇到第一个不相等的字符则会根据其ASCII码来比较大小,我们都知道整型数字越大,ASCII码也越大,所以我们只需要比较A+B跟B+A之间的大小,将数组按照这个规则去排序,拍出来的不就是我们想要的结果了吗?

public String solve (int[] nums) {
        // 3   32  321
        if(nums == null || nums.length == 0)
            return "";
        int n = nums.length;
        String[] strs = new String[n];
        for(int i = 0; i < n; i++){
            strs[i] = nums[i]+"";
        }
        Arrays.sort(strs,(s1,s2)->{
           return (s2+s1).compareTo(s1+s2);  /*降序排序*/
        });
        if(strs[0].equals("0"))
            return "0";
        StringBuffer sb = new StringBuffer();
        for(String num:strs)
            sb.append(num);
        return sb.toString();
    }

CS-Review 文章被收录于专栏

本专栏记录本人维护的仓库( cs-review.cn )分类刷题解法~

全部评论
秒啊
1 回复 分享
发布于 2021-08-20 19:39

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
Noel_:中石油是这样的 哥们侥幸混进免笔试名单 一看给我吓尿了
点赞 评论 收藏
分享
10 收藏 评论
分享
牛客网
牛客企业服务