LeetCode 179 最大数

1 题目描述

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

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

- 示例1

输入:[10,2]

输出:"210"

2 题目分析

首先想到的思路是对数组排序,如果全是个位数的话,越大的数越往前排。然后组成字符串即可。

如果一个个位数和一个两位数比较,第一个位置大的排在前面(34和4比较的话,4应该排在前面);如果个位相同的话(3和34),应该拿着剩下的数4再和个位去比较。

如果所有位置都比较完了,仍没有比较出结果,则位置不用动(如123和123123),谁在前组成的数都一样

3 代码

public static String largestNumber1(int[] nums) {
        
        //把基本数据类型转为包装类型的数组
        Integer[] array = new Integer[nums.length];
        int start =0;
        for(int i : nums){
            array[start ++] = i;
        }
        Arrays.sort(array,new Comparator<Integer>() {
            @Override
            public int compare(Integer a1, Integer a2) {
                String s1 = String.valueOf(a1);
                String s2 = String.valueOf(a2);
                int length1 = s1.length(), length2 = s2.length();
                int i = 0, j = 0;
                while (i < length1 && j < length2) {
                    if (s1.charAt(i) > s2.charAt(j)) {
                        return -1;
                    } else if (s1.charAt(i) < s2.charAt(j)) {
                        return 1;
                    }
                    i++; j++;
                    if (i == length1 && j < length2) {
                        i = 0;
                    }
                    if (i < length1 && j == length2) {
                        j = 0;
                    }
                }
                //都循环完了,没有比较出来,说明谁在前都一样,保持位置不用调换
                return 0;
            }
        });
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < nums.length; i ++){
            sb.append(array[i]);
        }
        return sb.toString();
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值