题目描述
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
解题思路
本题最重要的一点,是排序方法的实现,单一排序中,如果遇到首字符相同的情况,则无法进行,本题则需要实现一直组合排序,比如字符a和b,那么需要对比他们的组合字符ab和ba的大小!!!因为这种排序遵循传递性规律,所以可行性高。
代码实现
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
import java.util.Arrays;
import java.util.Comparator;
public class findLargestNumber {//acc:8ms 48%
//最大数
private class LargerNumberCompartor implements Comparator<String>{//本题核心点在于排序的比较器实现
//通过将数组元素转化为字符串,将比较两种数哪个组合更大,
//转换为组合字符串比较两种字符串哪个更大
public int compare(String a,String b){
String order1=a+b;
String order2=b+a;
return order2.compareTo(order1);
}
}
public String largestNumber(int[] nums){
String[] asStrs=new String[nums.length];
for (int i=0;i<nums.length;i++){
asStrs[i]=String.valueOf(nums[i]);
}
Arrays.sort(asStrs,new LargerNumberCompartor());
if (asStrs[0].equals("0")){
return "0";
}
String largestNumberStr=new String();
for (String numAsStr:asStrs){
largestNumberStr+=numAsStr;
}
return largestNumberStr;
}
public static void main(String[] args) {
findLargestNumber test=new findLargestNumber();
int[] nums={10,1,2,5,53};
String string = test.largestNumber(nums);
System.out.println(string);
}
}
总结
本题来源于Leetcode中 归属于排序类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!
觉得本博客有用的客官,可以给个赞鼓励下! 嘿嘿