給定一組非負整數 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; } }