0179. Largest Number
https://leetcode.com/problems/largest-number
Description
Given a list of non-negative integers nums
, arrange them such that they form the largest number.
Note: The result may be very large, so you need to return a string instead of an integer.
Example 1:
**Input:** nums = [10,2]
**Output:** "210"
Example 2:
**Input:** nums = [3,30,34,5,9]
**Output:** "9534330"
Example 3:
**Input:** nums = [1]
**Output:** "1"
Example 4:
**Input:** nums = [10]
**Output:** "10"
Constraints:
1 <= nums.length <= 100
0 <= nums[i] <= 109
ac
// soooo smart!
// key: sort array -> comparator -> given two element, how to decide their order.
class Solution {
public String largestNumber(int[] nums) {
// edge cases
if (nums.length == 0) return null;
if (nums.length == 1) return String.valueOf(nums[0]);
// int[] -> String[]
String[] strs = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
strs[i] = String.valueOf(nums[i]);
}
// sort, recursively
Arrays.sort(strs, (String s1, String s2) -> {
String n1 = s1 + s2;
String n2 = s2 + s1;
return n1.compareTo(n2);
});
// edge case: all 0
if (strs[strs.length - 1].equals("0")) return "0";
// append
StringBuilder sb = new StringBuilder();
for (int i = strs.length - 1; i >= 0; i--) {
sb.append(strs[i]);
}
//return
return sb.toString();
}
}
Last updated
Was this helpful?