小念子

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

给定一组非负整数 nums,重新排列它们每个数字的顺序(每个数字不可拆分)使之组成一个最大的整数。

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

 

 

 解答

自定义一种排序方法,降序排序,最后将排序后的结果合并

    public String largestNumber(int[] nums) {
        List<String> list = new ArrayList<String>(nums.length);
        for (int num : nums) {
            list.add(num + "");
        }
        Collections.sort(list, new Comparator<String>() {

            @Override
            public int compare(String arg0, String arg1) {
                // TODO Auto-generated method stub
                String merge0 = arg0 + arg1;
                String merge1 = arg1 + arg0;
                for (int i = 0; i < merge0.length(); ++i) {
                    char ch0 = merge0.charAt(i);
                    char ch1 = merge1.charAt(i);
                    if (ch0 != ch1) {
                        return ch1 - ch0;
                    }
                }
                return 0;
            }
        });
        
        if (list.get(0).equals("0")) { // 处理全是0的情况
            return "0";
        }
        
        StringBuilder stringBuilder = new StringBuilder();
        for (String value : list) {
            stringBuilder.append(value);
        }
        return stringBuilder.toString();
    }

 

针对int a与int b,可以转换成String后,比较a+b与b+a的大小

注意全是0的处理,结果是0,而不是00000...

 

posted on 2020-11-21 15:53  小念子  阅读(101)  评论(0编辑  收藏  举报