package com.interview.books.leetcodeoj;
import java.util.Arrays;
import java.util.Comparator;
/**
* Created_By: stefanie
* Date: 15-1-16
* Time: 下午9:44
*/
public class LOJ175_LargestNumber {
//change num into String and create a comparator of String s1 and s2, return 1 when s1+s2 > s2+s1 (parse to long value)
//sort the strs using comparator and create largest number by scan backwards.
//be careful of "all zero" cases.
public String largestNumber(int[] num) {
Comparator<String> comparator = new Comparator<String>(){
public int compare(String s1, String s2){
return (s1+s2).compareTo(s2+s1);
}
};
String[] strs = new String[num.length];
for(int i = 0; i < num.length; i++) strs[i] = String.valueOf(num[i]);
Arrays.sort(strs, comparator);
StringBuffer buffer = new StringBuffer();
boolean haveNonZero = false;
for(int i = strs.length - 1; i >= 0; i--) {
if(strs[i].equals("0") && !haveNonZero) continue;
else haveNonZero = true;
buffer.append(strs[i]);
}
return buffer.length() == 0? "0" : buffer.toString();
}
public static void main(String[] args){
LOJ175_LargestNumber generator = new LOJ175_LargestNumber();
int[] nums = new int[]{3,30,34,5,9,0};
System.out.println(generator.largestNumber(nums)); //95343300
nums = new int[]{0,0};
System.out.println(generator.largestNumber(nums)); //0
}
}