LintCode:M-最大数

来源:互联网 发布:日本综艺节目软件app 编辑:程序博客网 时间:2024/05/22 00:53

LintCode链接

给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。

 注意事项

最后的结果可能很大,所以我们返回一个字符串来代替这个整数。

样例

给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201


public class Solution {    /*     * @param nums: A list of non negative integers     * @return: A string     */    public String largestNumber(int[] nums) {        Comparator<Integer> cmpr = new Comparator<Integer>(){            public int compare(Integer a, Integer b){                String sa = a+"";                String sb = b+"";                if(sa.length()==sb.length()){                    if(a==b) return 0;                    return a>b?1:-1;                }                                //保证a长度比b小                if(sa.length()>sb.length())                    return -1*compare(b, a);                                //取公共的部分比较                int ta = a;                int tb = Integer.valueOf(sb.substring(0, sa.length()));                if(ta==tb){                    tb = Integer.valueOf(sb.substring(sa.length(), sb.length()));                    //tb剩余部分再与ta比较                    return compare(ta, tb);                }else{                    return ta>tb?1:-1;                }            }        };                Integer[] numss = new Integer[nums.length];        for(int i=0; i<nums.length; i++) {        numss[i] = nums[i];        }                Arrays.sort(numss, cmpr);//sort比较器类型必须和数组的一致,否则报错                //0的特殊处理        if(numss[numss.length-1]==0)            return "0";                StringBuffer res = new StringBuffer("");        for(int i=numss.length-1; i>=0; i--){            res.append(numss[i]);        }                return res.toString();    }}