179. Largest Number

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

 
Hide Tags
 Sort
 
public class Solution {
    public String largestNumber(int[] nums) {
        ArrayList<String> strs = new ArrayList<String>();
        for(int i : nums)
        {
            strs.add(new Integer(i).toString());
        }
        
        Collections.sort(strs, new Comparator<String>() {
      @Override
      public int compare(String o1, String o2) {
        char[] chars1 = o1.toCharArray();
        char[] chars2 = o2.toCharArray();
        int l1 = chars1.length;
        int l2 = chars2.length;
        int l = l1+l2;
        for (int i = 0; i < l; ++i) {
          char char1;
          char char2;
          if (i < l1)
            char1 = chars1[i];
          else
            char1 = chars2[i-l1];  //"o1"+"o2"
            
          if (i < l2)
            char2 = chars2[i];
          else
            char2 = chars1[i-l2];  //"o2"+"o1"
            
          if(char1<char2)
            return -1;   // "o1" is small
          else if(char1>char2)
            return 1;    // "o1" is large
        }
        return 0;
      }
    });
        
        if(strs.get(strs.size()-1).charAt(0)=='0')
            return "0";
        
        StringBuilder sb = new StringBuilder();
        for(int i = strs.size()-1; i>=0;--i)
        {
            sb.append(strs.get(i));
        }
        return sb.toString();
    }
}

 

 
 
posted @ 2016-04-26 14:10  新一代的天皇巨星  阅读(149)  评论(0)    收藏  举报