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     }

 

posted @ 2016-07-09 07:23  warmland  阅读(364)  评论(0编辑  收藏  举报