Leetcode 179. 最大数
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;
}
});
后面感觉我在前面这一段判断的也可以用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();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理