版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majichen95/article/details/86549629
给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。
样例
给出 [1, 20, 23, 4, 8]
,返回组合最大的整数应为8423201
。
挑战
在 O(nlogn) 的时间复杂度内完成。
注意事项
最后的结果可能很大,所以我们返回一个字符串来代替这个整数。
解题思路:
主要问题在于排序方式,这里需要采用逐位倒序,按照ASCII 码逐位比较, 比如'3' 比'2'大。 例如s1 123, s2, 133. s1 + s2 = 123133, s2 + s1 = 133123, 那么s2 + s1应该排前面
public class Solution {
/**
* @param nums: A list of non negative integers
* @return: A string
*/
public String largestNumber(int[] nums) {
// write your code here
//将nums转换为String存储
String[] strs = new String[nums.length];
for (int i = 0; i < nums.length; i++)
strs[i] = Integer.toString(nums[i]);
//按照ascii码逐位比较
Arrays.sort(strs, new Comparator<String>(){
public int compare(String s1, String s2){
return (s2 + s1).compareTo(s1 + s2);
}
});
//所有拍好序元素拼接为一个整体
StringBuilder sb = new StringBuilder();
for(int i=0; i<strs.length; i++)
sb.append(strs[i]);
//去除多余的前缀0
while(sb.length()>1 && sb.charAt(0)=='0')
sb.delete(0,1);
return sb.toString();
}
}