**Input:** nums = [10,2]
**Output:** "210"
**Input:** nums = [3,30,34,5,9]
**Output:** "9534330"
**Input:** nums = [1]
**Output:** "1"
**Input:** nums = [10]
**Output:** "10"
// 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();
}
}