給定一組非負整數,重新排列它們的順序使之組成一個最大的整數。
示例 1:
輸入: [10,2]
輸出: 210
示例?2:
輸入: [3,30,34,5,9]
輸出: 9534330
說明: 輸出結果可能非常大,所以你需要返回一個字符串而不是整數。
思路:貪心,對于兩個字符串,如果a+b<b+a,則交換位置。整體按這個標準排序即可。
有時候現場一時證明不了想的貪心策略是否正確,這時可以先嘗試一下到底對不對,萬一對了就賺了。
證明:
class Solution {private class LargerNumberComparator implements Comparator<String> {@Overridepublic int compare(String a, String b) {String order1 = a + b;String order2 = b + a;return order2.compareTo(order1);}}public String largestNumber(int[] nums) {String[] asStrs = new String[nums.length];for (int i = 0; i < nums.length; i++) {asStrs[i] = String.valueOf(nums[i]);}Arrays.sort(asStrs, new LargerNumberComparator());if (asStrs[0].equals("0")) {return "0";}String str = new String();for (String numAsStr : asStrs) {str += numAsStr;}return str;}
}
?