Largest number,leetcode
来源:互联网 发布:华为网络基础知识 编辑:程序博客网 时间:2024/05/01 21:25
首先,这道题我的一个好哥们儿提供了很好的方法:http://blog.csdn.net/ljiabin/article/details/42676433
【题目】
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.
【思路】要想比较两个数在最终结果中的先后位置,何不直接比较一下不同组合的结果大小?
举个例子:要比较3和34的先后位置,可以比较334和343的大小,而343比334大,所以34应当在前。
这样,有了比较两个数的方法,就可以对整个数组进行排序。然后再把排好序的数拼接在一起就好了。
关键在于处理大数,例如12345和67890的比较,组合起来1234567890超过int的表示范围了,因此对我朋友的代码中的组合比较方法进行了修改。
其实可以直接用字符串的compareTo方法,这个方法是按照字典序来比较的,正好符合题目的要求。
【代码如下】
public class Solution { public String largestNumber(int[] num) { //transform nums into string String[] strs = new String[num.length]; for(int i=0;i<num.length;i++){ strs[i] = num[i]+""; } //sort nums accordding to their final positions Arrays.sort(strs,new MyComparator()); //joint nums together String result = ""; for(int i=strs.length-1;i>=0;i--){ result = result + strs[i]; } //remove 0 at head int i=0; while(i<result.length() && result.charAt(i) == '0'){ i++; } if(i == result.length()){ return "0"; } return result.substring(i); }}//specify comparatorclass MyComparator implements Comparator<String>{ public int compare(String a,String b){ //BigDecimal ab = new BigDecimal(a+b); //BigDecimal ba = new BigDecimal(b+a); //return ab.compareTo(ba); String ab = a+b; String ba = b+a; return ab.compareTo(ba); } }
0 0
- Largest Number @leetCode
- LeetCode : Largest Number
- Leetcode Largest Number
- [LeetCode] Largest Number
- [leetcode]179 Largest Number
- [LeetCode] Largest Number
- Leetcode Largest Number
- [LeetCode]Largest Number
- leetcode 179: Largest Number
- 【LeetCode】Largest Number
- 【Leetcode】Largest Number
- [LeetCode]179.Largest Number
- LeetCode: Largest Number
- Largest Number|leetcode解决方案
- leetcode 之Largest Number
- [leetcode] Largest Number
- LeetCode(179) Largest Number
- [leetcode]Largest Number
- Unity5新的AssetBundle系统使用心得
- Bootstrap Carousel(轮播插件)
- 2015-03-11--数据结构开始
- hdu 1002 A + B Problem II
- 查找数组中出现次数超过一半的数字
- Largest number,leetcode
- 内存映射文件原理
- Shell中的&&、 ||、 ()和 {}
- 额无法收到温热通过是大法官
- c++11中lambda
- Android中SQLite应用详解
- 围观围观
- iOS笔记之_OC面向对象语法1
- signed和unsigned之二