题目
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
代码
class Solution {
public String largestNumber(int[] nums) {
int n = nums.length;
String[] s = new String[n];
for (int i = 0; i < n; i++) {
s[i] = nums[i] + "";
}
Arrays.sort(s, new Comparator<String>() {
@Override
public int compare(String a, String b) {
String sa = a + b, sb = b + a ;
return sb.compareTo(sa);
}
});
StringBuilder sb = new StringBuilder();
for (String str : s
) {
sb.append(str);
}
int len = sb.length();//消除前导0
int k = 0;
while (k < len - 1 && sb.charAt(k) == '0') k++;
return sb.substring(k);
}
}
要点
- 贪心策略:我们可以根据「结果」来决定 aa 和 bb 的排序关系:如果拼接结果 abab 要比 baba 好,那么我们会认为 aa 应该放在 bb 前面。
- 拼接的时候注意需要处理前导零(最多保留一位)