leetcode 179 Largest Number
2015-01-27 21:35
1746 查看
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given
Note: The result may be very large, so you need to return a string instead of an integer.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
知识点:
java比较器(Comparable、Comparator)
Comparable接口的作用之前Arrays类中存在sort()方法,此方法可以直接对对象数组进行排序。 Comparable接口可以直接使用java.util.Arrays类进行数组的排序操作,但对象所在的类必须实现Comparable接口,用于指定排序接口。Comparable接口的定义如下:public interface Comparable<T>{ public int compareTo(T o);}此方法返回一个int类型的数据,但是此int的值只能是一下三种:1:表示大于-1:表示小于0:表示相等
String 的compareTo方法
compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度.
例:
String s1 = "abc";
String s2 = "abcd";
String s3 = "abcdfg";
String s4 = "1bcdfg";
String s5 = "cdfg";
System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1长度小1)
System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1长度小3)
System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)
System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)
3.时间复杂度
比较器的实质是二叉树排序,二叉树排序的时间复杂度是O(nlog2n)
可以看出还是O(n)的最好,其次是O(nlogn),最后是O(n^2)
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.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
public class Solution { private class Utils implements Comparable<Utils>{ String num; @Override public int compareTo(Utils o) { // TODO Auto-generated method stub return (String.valueOf(o.num)+num).compareTo(num+String.valueOf(o.num)); } } public String largestNumber(int[] num) { ArrayList<Utils> tmps = new ArrayList<Utils>(); for(int i = 0; i < num.length; i ++){ Utils tmp = new Utils(); tmp.num = String.valueOf(num[i]); tmps.add(tmp); } Collections.sort(tmps);//排序 String result = ""; int k = 0; for(Utils str:tmps){ result +=str.num; if(str.num.equals("0")){ k ++; } } if(k == num.length){//如果全0则输出0; result = "0"; } return result; } }
知识点:
java比较器(Comparable、Comparator)
Comparable接口的作用之前Arrays类中存在sort()方法,此方法可以直接对对象数组进行排序。 Comparable接口可以直接使用java.util.Arrays类进行数组的排序操作,但对象所在的类必须实现Comparable接口,用于指定排序接口。Comparable接口的定义如下:public interface Comparable<T>{ public int compareTo(T o);}此方法返回一个int类型的数据,但是此int的值只能是一下三种:1:表示大于-1:表示小于0:表示相等
String 的compareTo方法
compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度.
例:
String s1 = "abc";
String s2 = "abcd";
String s3 = "abcdfg";
String s4 = "1bcdfg";
String s5 = "cdfg";
System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1长度小1)
System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1长度小3)
System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)
System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)
3.时间复杂度
比较器的实质是二叉树排序,二叉树排序的时间复杂度是O(nlog2n)
可以看出还是O(n)的最好,其次是O(nlogn),最后是O(n^2)
相关文章推荐
- Java 特定规则排序-LeetCode 179 Largest Number
- leetcode179-Largest Number(把数组排成最大的数)
- Leetcode179: Largest Number
- leetcode 179 largest number
- LeetCode[179] Largest Number
- LeetCode(179) Largest Number
- LeetCode179:Largest Number
- LeetCode(179) Largest Number
- LeetCode179—Largest Number
- LeetCode - 179 - Largest Number
- [LeetCode#179]Largest Number
- Largest Number(leetcode 179)
- LeetCode 179 Largest Number
- leetcode:sort:Largest Number(179)
- leetcode--179:Largest Number
- Leetcode 179 Largest Number
- Largest Number(leetcode 179)
- LeetCode 179 Largest Number
- Leetcode#179 Largest Number
- leetcode 179: Largest Number