来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-number/

描述

给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

示例 1:
输入: [10,2]
输出: 210

示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。

题解

  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. String[] asStrs = new String[nums.length];
  12. for (int i = 0; i < nums.length; i++) {
  13. asStrs[i] = String.valueOf(nums[i]);
  14. }
  15. // Sort strings according to custom comparator
  16. Arrays.sort(asStrs, new LargerNumberComparator());
  17. // If, after being sorted, the largest number is `0`, the entire number
  18. // is zero.
  19. if (asStrs[0].equals("0")) {
  20. return "0";
  21. }
  22. String largestNumberStr = new String();
  23. for (String numAsStr : asStrs) {
  24. largestNumberStr += numAsStr;
  25. }
  26. return largestNumberStr;
  27. }
  28. }

复杂度分析

  • 时间复杂度:179. 最大数(Largest Number) - 图1。尽管我们在比较函数中做了一些额外的工作,但是这只是一个常数因子。所以总的时间复杂度是由排序决定的。
  • 空间复杂度:179. 最大数(Largest Number) - 图2