LintCode:M-最大數
阿新 • • 發佈:2019-02-08
給出一組非負整數,重新排列他們的順序把他們組成一個最大的整數。
注意事項
最後的結果可能很大,所以我們返回一個字串來代替這個整數。
您在真實的面試中是否遇到過這個題? Yes 樣例給出 [1, 20, 23, 4, 8]
,返回組合最大的整數應為8423201
。
public class Solution { /* * @param nums: A list of non negative integers * @return: A string */ public String largestNumber(int[] nums) { Comparator<Integer> cmpr = new Comparator<Integer>(){ public int compare(Integer a, Integer b){ String sa = a+""; String sb = b+""; if(sa.length()==sb.length()){ if(a==b) return 0; return a>b?1:-1; } //保證a長度比b小 if(sa.length()>sb.length()) return -1*compare(b, a); //取公共的部分比較 int ta = a; int tb = Integer.valueOf(sb.substring(0, sa.length())); if(ta==tb){ tb = Integer.valueOf(sb.substring(sa.length(), sb.length())); //tb剩餘部分再與ta比較 return compare(ta, tb); }else{ return ta>tb?1:-1; } } }; Integer[] numss = new Integer[nums.length]; for(int i=0; i<nums.length; i++) { numss[i] = nums[i]; } Arrays.sort(numss, cmpr);//sort比較器型別必須和陣列的一致,否則報錯 //0的特殊處理 if(numss[numss.length-1]==0) return "0"; StringBuffer res = new StringBuffer(""); for(int i=numss.length-1; i>=0; i--){ res.append(numss[i]); } return res.toString(); } }