标签:leetcode
https://oj.leetcode.com/problems/largest-number/
public class Solution {
public String largestNumber(int[] num)
{
if (num == null || num.length == 0)
return "";
// Convert to string.
List<String> strs = new ArrayList<>();
for (int i : num)
strs.add(String.valueOf(i));
// Sort.
// KEY STEP.
Collections.sort(strs, comparator);
// Case all numbers are 0.
if (strs.get(0).equals("0"))
return "0";
// Build result.
StringBuilder sb = new StringBuilder();
for (String s : strs)
sb.append(s);
return sb.toString();
}
// Comparator for string.
//
// a小于b 返回 -1
// 默认sort 是 从小到大
private Comparator<String> comparator = new Comparator<String>()
{
public int compare(String a, String b)
{
int i = 0;
while (i < a.length() && i < b.length())
{
char ca = a.charAt(i);
char cb = b.charAt(i);
if (ca != cb)
return Character.compare(cb, ca);
i++;
}
// 如果两字符相等
if (i == a.length() && i == b.length())
return 0;
// 如果一个字符是另外一个字符的substring,需要重复比对
// 体会
// compare (12, 128)
// compare (131, 13)
else if (i != a.length()) // a has more
return compare(a.substring(i, a.length()), b);
else // i == a.length && i != b.length
return compare(a, b.substring(i, b.length()));
}
};
}标签:leetcode
原文地址:http://7371901.blog.51cto.com/7361901/1603903