《leetCode》:Largest Number

题目

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

思路

找出组合中的最大数,最简单的思路就是:找出这些的全排列,然后取出最大值,但是这样的时间复杂度为n!。另外一种思路就是将这些数字对应的字符串进行排序(注意这里的排序并不是根据字符本身的比较进行排序,而是组合的排序),最后组合起来就可以了。

public String largestNumber(int[] nums) {
        if(nums==null||nums.length<1){
            return null;
        }
        //排序
        int len=nums.length;
        String [] strs=new String[len];
        for(int i=0;i<len;i++){
            strs[i]=Integer.toString(nums[i]);
        }
        Arrays.sort(strs, new Comparator<String>(){
            @Override
            public int compare(String str1, String str2) {
                StringBuilder sb=new StringBuilder();
                StringBuilder sb2=new StringBuilder();
                sb.append(str1).append(str2);
                sb2.append(str2).append(str1);              
                return sb.toString().compareTo(sb2.toString());
            }

        });
        //将排序后的结果组合起来就好
        if(strs[len-1].charAt(0)=='0'){//如果最高位都为0,则返回0
            return "0";
        }
        StringBuffer sb=new StringBuffer();
        for(int i=len-1;i>=0;i--){
            sb.append(strs[i]);
        }
        return sb.toString();
    }

你可能感兴趣的:(number,Largest)