For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.
Note: The result may be very large, so you need to return a string instead of an integer.
[分析] 贪心思想,任两个数字字符串a, b, 若 a + b > b + a, 则a 应排在 b 前面。
注意点:
1.Arrays.sort()不支持给int数组传自定义比较器,因此需要转为String数组进行排序。
2.要判断并处理前缀为0的结果。
public class Solution { Comparator<String> comparator = new Comparator<String>() { public int compare(String a, String b) { String result1 = a + b; String result2 = b + a; return result1.compareTo(result2); } }; public String largestNumber(int[] nums) { if (nums == null || nums.length == 0) return ""; int N = nums.length; String[] numstrs = new String[N]; for (int i = 0; i < N; i++) numstrs[i] = String.valueOf(nums[i]); Arrays.sort(numstrs, comparator); StringBuilder sb = new StringBuilder(); for (int i = N - 1; i >= 0; i--) sb.append(numstrs[i]); // truncate prefix 0 // style 1 /* if (sb.charAt(0) == '0' && N > 1) { int j = 0; while (j < sb.length() - 1 && sb.charAt(j) == '0') j++; sb.delete(0, j); } return sb.toString();*/ // style 2 int i = 0; while (i < sb.length() && sb.charAt(i) == '0') i++; if (i == sb.length()) return "0"; else return sb.substring(i, sb.length()); } }