您的位置:首页 > 编程语言 > Java开发

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
[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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java