【发布时间】:2015-06-17 10:44:46
【问题描述】:
算法题:给定一个非负整数列表,将它们排列成最大的数。
例如,给定 [3, 30, 34, 5, 9],最大的形成数是 9534330。
注意:结果可能会很大,所以需要返回字符串而不是整数。
public class Solution {
public String largestNumber(int[] num) {
Arrays.sort(num, new java.util.Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
String s1 = String.valueOf(a), s2 = String.valueOf(b);
return Integer.parseInt(s1 + s2) - Integer.parseInt(s2 + s1);
}
});
StringBuilder builder = new StringBuilder();
for (int i = num.length - 1; i >= 0; i--) builder.append(num[i]);
return builder.toString();
}
}
结果:第 3 行:错误:没有找到适合 sort(int[],
有人知道怎么修改吗?谢谢!
感谢您的所有详细回答,我已将代码修改为
public String largestNumber(int[] num) {
int N = num.length;
String[] aux = new String[N];
for (int i = 0; i < N; i++) aux[i] = String.valueOf(num[i]); // int[] -> String[]
Arrays.sort(aux, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return (int) (Long.parseLong(a + b) - Long.parseLong(b + a)); // note the overflow of int, max + max
}
});
StringBuilder builder = new StringBuilder();
for (int i = N - 1; i >= 0; i--) builder.append(aux[i]);
int sub = 0;
for ( ; sub < builder.length() - 1 && builder.charAt(sub) == '0'; sub++);
return builder.substring(sub).toString();
}
我仍在努力寻找避免使用额外空间的方法。
【问题讨论】:
-
Comparator
仅适用于 objects不适用于primitive
标签: java arrays algorithm sorting