【多次过】【Comparator】Lintcode 184. 最大数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majichen95/article/details/86549629

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

样例

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

挑战

在 O(nlogn) 的时间复杂度内完成。

注意事项

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


解题思路:

主要问题在于排序方式,这里需要采用逐位倒序,按照ASCII 码逐位比较, 比如'3' 比'2'大。 例如s1 123, s2, 133. s1 + s2 = 123133, s2 + s1 = 133123, 那么s2 + s1应该排前面

public class Solution {
    /**
     * @param nums: A list of non negative integers
     * @return: A string
     */
    public String largestNumber(int[] nums) {
        // write your code here
        //将nums转换为String存储
        String[] strs = new String[nums.length];
        for (int i = 0; i < nums.length; i++) 
            strs[i] = Integer.toString(nums[i]);
        
        //按照ascii码逐位比较
        Arrays.sort(strs, new Comparator<String>(){
            public int compare(String s1, String s2){
                return (s2 + s1).compareTo(s1 + s2);
            }    
        });
        
        //所有拍好序元素拼接为一个整体
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<strs.length; i++)
            sb.append(strs[i]);
        
        //去除多余的前缀0
        while(sb.length()>1 && sb.charAt(0)=='0')
            sb.delete(0,1);
        
        return sb.toString();
    }
}

猜你喜欢

转载自blog.csdn.net/majichen95/article/details/86549629