【一次过】Lintcode 379. 将数组重新排序以构造最小值

给定一个整数数组,请将其重新排序,以构造最小值。

样例

样例 1:

输入:[2, 1]
输出:[1, 2]
解释:通过将数组重新排序,可构造 2 个可能性数字:
           1+2=12
           2+1=21
其中,最小值为 12,所以,将数组重新排序后,该数组变为 [1, 2]。

样例 2:

输入:[3, 32, 321]
输出:[321, 32, 3]
解释:通过将数组重新排序,可构造 6 个可能性数字:
	3+32+321=332321
	3+321+32=332132
	32+3+321=323321
	32+321+3=323213
	321+3+32=321332
	321+32+3=321323
其中,最小值为 321323,所以,将数组重新排序后,该数组变为 [321, 32, 3]。

挑战

在原数组上完成,不使用额外空间。

注意事项

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


解题思路:

比较简单,直接看代码

public class Solution {
    /**
     * @param nums: n non-negative integer array
     * @return: A string
     */
    public String minNumber(int[] nums) {
        // write your code here
        String[] strs = new String[nums.length];
        for(int i=0; i<nums.length; i++)
            strs[i] = "" + nums[i];
        
        //按照字符串拼接进行排序
        Arrays.sort(strs, new Comparator<String>(){
            @Override
            public int compare(String a, String b){
                String str1 = a + b;
                String str2 = b + a;
                return str1.compareTo(str2);
            }
        });
        
        //拼接排序后的字符串
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<strs.length; i++)
            sb.append(strs[i]);
        
        //除掉前导0,注意但只有一个0时不需要除去
        while(sb.charAt(0) == '0' && sb.length() > 1)
            sb.deleteCharAt(0);
        
        return sb.toString();
    }
}

 

上一篇:Android ZXING通过BitMatrix编码qr->存储到byte []->插入数据库


下一篇:条形码生成及解码、二维码生成及解码