179. Largest Number
转成String,然后按照一定的规律排序,最后再连起来,如果给的值里全是0(一个或多个),那就返回“0”,否则返回连起来的结果。
排序的规则:
如果一位一位比较,如果某个数在前面的数字比较大,那么这个数就放前面。
如果两个数不一样长,并且前面的数字都相同,那么就那短的那个,和长的那个后面多出来的半截比。
比如说32>13. 322<32,329>32
1 public String largestNumber(int[] nums) { 2 if (nums.length == 0) { 3 return null; 4 } 5 List<String> strs = new ArrayList<String>(); 6 for(int each: nums) { 7 strs.add(String.valueOf(each)); 8 } 9 Collections.sort(strs, new Comparator<String>(){ 10 public int compare(String o1, String o2) { 11 int len1 = o1.length(); 12 int len2 = o2.length(); 13 boolean shorter = len1 < len2; 14 int max = shorter? len1: len2; 15 for(int i = 0; i < max; i++) { 16 if(o1.charAt(i) != o2.charAt(i)) { 17 return o2.charAt(i) - o1.charAt(i); 18 } 19 } 20 if(len1 != len2) { 21 if(shorter) { 22 return compare(o1, o2.substring(max, len2)); 23 } else { 24 return compare(o1.substring(max, len1), o2); 25 } 26 } else { 27 return 0; 28 } 29 } 30 }); 31 String res = ""; 32 for(String each: strs) { 33 res += each; 34 } 35 return res.charAt(0) == '0'? "0": res; 36 }