【LeetCode每日一題】最大數

最大數

一、題目描述

給定一組非負整數 nums,從新排列每一個數的順序(每一個數不可拆分)使之組成一個最大的整數。

注意:輸出結果可能很是大,因此你須要返回一個字符串而不是整數。

示例 1:java

輸入:nums = [10,2]
輸出:"210"

示例 2:算法

輸入:nums = [3,30,34,5,9]
輸出:"9534330"

示例 3:數組

輸入:nums = [1]
輸出:"1"

示例 4:app

輸入:nums = [10]
輸出:"10"

二、算法描述

思想:
	想盡辦法讓頭部數字大的放在前面,若是頭部數字同樣的話,那麼久比較A+B和B+A組合後的數字大小
	若A+B大的話,A在前B在後,反之B在前,A在後
具體實現:
	一、從第一個數字開始排序,找首位數字最大的數字排在最前面。
	二、若是發現A和B的首字母相等,比較A+B和B+A的大小,若A+B大的話,A在前B在後,反之B在前,A在後
	三、數組排序後,用一個StringBuffer接收,而後字符串的方式輸出。
	四、考慮特殊狀況,可能會出現"00","000".....等等,結果爲0,可是首位是0,此時咱們就把0返回回去就行

三、具體實現

class Solution {
    public String largestNumber(int[] nums) {
        nums = this.sort(nums);
        StringBuffer s = new StringBuffer();
        for (int num:nums) {
            s.append(num);
        }
        if (s.length() >=2 && s.charAt(0) == '0') {
            return "0";
        } else {
            return s.toString();
        }
    }

    public int[] sort(int[] nums) {
        int temp;
        for (int i=0;i<nums.length-1;i++) {
            String self = nums[i] + "";
            for (int j=i+1;j<nums.length;j++) {
                String next = nums[j] + "";
                if (self.charAt(0) < next.charAt(0)) {
                    temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                    self = nums[i] + "";
                }
                if (self.charAt(0) == next.charAt(0)) {
                    if (Long.parseLong(self + next) < Long.parseLong(next + self)) {
                        temp = nums[i];
                        nums[i] = nums[j];
                        nums[j] = temp;
                        self = nums[i] + "";
                    }
                }
            }
        }
        return nums;
    }
}
相關文章
相關標籤/搜索