categories: [Blog,Algorithm,mid]


179. 最大数

难度中等477
给定一组非负整数 nums,重新排列它们每个数字的顺序(每个数字不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例 1:
输入nums = [10,2]
输出:"210"
示例 2:
输入nums = [3,30,34,5,9]
输出:"9534330"
示例 3:
输入nums = [1]
输出:“1”

示例 4:
输入nums = [10]
输出:“10”

  1. class Solution {
  2. private class LargerNumberComparator implements Comparator<String> {
  3. @Override
  4. public int compare(String a, String b) {
  5. String order1 = a + b;
  6. String order2 = b + a;
  7. return order2.compareTo(order1);
  8. }
  9. }
  10. public String largestNumber(int[] nums) {
  11. // Get input integers as strings.
  12. String[] asStrs = new String[nums.length];
  13. for (int i = 0; i < nums.length; i++) {
  14. asStrs[i] = String.valueOf(nums[i]);//字符串比较
  15. }
  16. // Sort strings according to custom comparator.
  17. Arrays.sort(asStrs, new LargerNumberComparator());
  18. // If, after being sorted, the largest number is `0`, the entire number
  19. // is zero.
  20. if (asStrs[0].equals("0")) {
  21. return "0";
  22. }
  23. // Build largest number from sorted array.
  24. String largestNumberStr = new String();
  25. for (String numAsStr : asStrs) {
  26. largestNumberStr += numAsStr;//数字很大需返回字符串
  27. }
  28. return largestNumberStr;
  29. }
  30. }