Leetcode 179. 最大数
这是一道很经典的题目
难度
中等
题目
https://leetcode-cn.com/problems/largest-number/
解法
排序
给我们的是int类型数组,我们首先需要将其转化为string数组。
排序的比较器:
尽可能将大的数字放在前面。
所以我刚开始排序写的是下面这样:
Arrays.sort(strNum, new Comparator<String>() {
public int compare(String o1, String o2) {
int length = o1.length() < o2.length() ? o1.length() : o2.length();
for (int i = 0; i < length; i++) {
if (o1.charAt(i) > o2.charAt(i))
return -1;
if (o2.charAt(i) > o1.charAt(i))
return 1;
if (i == length - 1) {
String s1 = o1 + o2;
String s2 = o2 + o1;
for (int j = 0; j < s2.length(); j++) {
if (s1.charAt(j) > s2.charAt(j))
return -1;
else if (s1.charAt(j) < s2.charAt(j))
return 1;
}
return 0;
}
}
return 0;
}
});
后面感觉我在前面\(i<length-1\)这一段判断的也可以用s1+s2与s2+s1比较判断。
利用lambda表达式:
class Solution {
public String largestNumber(int[] nums) {
String strNum[] = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
strNum[i] = String.valueOf(nums[i]);
}
Arrays.sort(strNum, ((s1, s2) -> (s2 + s1).compareTo(s1 + s2)));
StringBuilder out = new StringBuilder();
for (String e : strNum)
out.append(e);
if (out.length() != 1) {
for (int i = 0; i < out.toString().length(); i++) {
if (out.charAt(i) != '0')
break;
if (out.charAt(i) == '0') {
out.deleteCharAt(i);
i = 0;
}
}
}
return out.toString();
}
}