1. 程式人生 > >LeetCode-整形陣列組合最大數(Java)

LeetCode-整形陣列組合最大數(Java)

文章目錄

題目描述

	給定一個正整型陣列,將陣列中各個元素組合成一個數,輸出組合結果最大的那個數。

示例

		輸入: {9, 3, 32, 33, 303}
		輸出: 9333323030

解析

	按照正常排序演算法,重寫比較函式,例如3與302比較大小,則轉換為333與302比較大小。
	public int getMaxNumber(int[] nums) {
        int len = nums.length;
        for(int i=0; i<len; i++){
            for(int j=i+1; j<len; j++){
                if(compare(nums[i], nums[j])){
                    int temp = nums[j];
                    nums[j] = nums[i];
                    nums[i] = temp;
                }
            }
        }
        return genResult(nums);
    }
    public boolean compare(int i, int j) {
        String strI = String.valueOf(i);
        String strJ = String.valueOf(j);
        int maxLen = Math.max(strI.length(), strJ.length());
        if (strI.length() == strJ.length()) return i < j;
        if(strI.length() != maxLen){
            while(strI.length() != maxLen){
                strI = strI + strI.charAt(strI.length()-1);
            }
        }
        if(strJ.length() != maxLen){
            while(strJ.length() != maxLen){
                strJ = strJ + strJ.charAt(strJ.length()-1);
            }
        }
        return Integer.valueOf(strI) < Integer.valueOf(strJ);
    }
    public int genResult(int[] nums) {
        StringBuilder builder = new StringBuilder();
        for(int i=0; i<nums.length; i++) {
            builder.append(nums[i]);
        }
        return Integer.valueOf(builder.toString());
    }