最大数

最大数

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

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
10
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务