179. Largest Number
Given a list of non negative integers, arrange them such that they form the largest number.
Example 1:
Input: [10,2]
Output: “210”
Example 2:
Input: [3,30,34,5,9]
Output: “9534330”
这道题重点在于重构比较器,一开始想用堆排序,发现不如直接调用Arrays.sort()
1、Arrays.sort()
class Solution {
public String largestNumber(int[] nums) {
String[] strs=new String[nums.length];
for(int i=0;i<nums.length;i++){
strs[i]=String.valueOf(nums[i]);
}
Comparator<String> cmp=new Comparator<String>(){
public int compare(String i,String j){
return (j+i).compareTo((i+j));
}
};
Arrays.sort(strs,cmp);
if(strs.length>0&&strs[0].charAt(0) == '0')return "0";
StringBuilder res=new StringBuilder();
for(String str:strs){
res.append(str);
}
return res.toString();
}
}
2、堆排序
class Solution {
public String largestNumber(int[] nums) {
PriorityQueue<Integer> heap=new PriorityQueue<Integer>(new Comparator<Integer>(){
public int compare(Integer i,Integer j){
StringBuilder i_j=new StringBuilder();
i_j.append(i);
i_j.append(j);
StringBuilder j_i=new StringBuilder();
j_i.append(j);
j_i.append(i);
return j_i.toString().compareTo(i_j.toString());
}
}
);
StringBuilder res=new StringBuilder();
for(int i=0;i<nums.length;i++){
heap.offer(nums[i]);
}
while(heap.peek()==0&&heap.size()>1){
heap.poll();
}
while(!heap.isEmpty()){
res.append(heap.poll());
}
return res.toString();
}
}