标签:String 最大数 int o2 length 179 out Leetcode charAt
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();
}
}
标签:String,最大数,int,o2,length,179,out,Leetcode,charAt 来源: https://www.cnblogs.com/miao123-blog/p/15817308.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。