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.

Credits:

Special thanks to @ts for adding this problem and creating all test cases.

SOLUTION 1:

参考http://bookshadow.com/weblog/2015/01/13/leetcode-largest-number/的解法:

贪心思路:对于两个备选数字a和b,如果str(a) + str(b) > str(b) + str(a),则a在b之前,否则b在a之前

按照此原则对原数组从大到小排序即可

时间复杂度O(nlogn)

易错样例:

Input:     [0,0]

Output:    "00"

Expected:  "0"

JAVA CODE:

 public class Solution {
public String largestNumber(int[] num) {
// 1045
// 1111 begin.
if (num == null) {
return null;
} ArrayList<Integer> list = new ArrayList<Integer>();
for (int n1: num) {
list.add(n1);
} Collections.sort(list, new Comparator<Integer>(){
public int compare(Integer o1, Integer o2) {
String s1 = "" + o1 + o2;
String s2 = "" + o2 + o1; return s2.compareTo(s1);
}
}); StringBuilder sb = new StringBuilder();
for (int n: list) {
sb.append(n);
} if (sb.charAt() == '') {
return "";
} return sb.toString();
}
}

附上一些关于Comparator ,comparable 的解释:

Comparator 是一个独立的比较器,里面implements "compare",而Comparable 可以由class本身来implement。

http://stackoverflow.com/questions/4108604/java-comparable-vs-comparator

Java : Comparable vs Comparator [duplicate]

When your class implements Comparable, the compareTo method of the class is defining the "natural" ordering of that object. That method is contractually obligated (though not demanded) to be in line with other methods on that object, such as a 0 should always be returned for objects when the .equals() comparisons return true.

Comparator is its own definition of how to compare two objects, and can be used to compare objects in a way that might not align with the natural ordering.

For example, Strings are generally compared alphabetically. Thus the "a".compareTo("b") would use alphabetical comparisons. If you wanted to compare Strings on length, you would need to write a custom comparator.

In short, there isn't much difference. They are both ends to similar means. In general implement comparable for natural order, (natural order definition is obviously open to interpretation), and write a comparator for other sorting or comparison needs.

相关reference:

http://examples.javacodegeeks.com/core-java/util/comparator/java-comparator-example/

CompareTo示例:

以下的小例子展示了CompareTo的用法:

Card 这个class 使用compareTo函数来实现内建的排序规则,输出如下:

false

1

2

4

 public static void main(String[] strs) {
int[] num = {, };
largestNumber(num); ArrayList<Card> cards = new ArrayList<Card>();
Card card1 = new Card();
Card card2 = new Card();
Card card3 = new Card(); cards.add(card1);
cards.add(card2);
cards.add(card3); if (card1.compareTo(card2) > ) {
System.out.println("true");
} else {
System.out.println("false");
} // uses compareTo method implemented in Card object to compare them
Collections.sort(cards); // uses compare method implements in Comparator class
//Collections.sort(cards, new CompareBySuitRank()); for (Card card : cards)
System.out.println(card.toString()); } public static class Card implements Comparable<Card>{
int val; public String toString() {
return "" + val;
} public Card(int val) {
super();
this.val = val;
} public int compareTo(Card o) {
return this.val - o.val;
}
}

Github:

https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/string/LargestNumber.java

LeetCode: Largest Number 解题报告 以及Comparator, CompareTo 应用的更多相关文章

  1. 【LeetCode】Largest Number 解题报告

    [LeetCode]Largest Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/largest-number/# ...

  2. 【LeetCode #179】Largest Number 解题报告

    原题链接:Largest Number 题目描述: Given a list of non negative integers, arrange them such that they form th ...

  3. 【原创】leetCodeOj --- Largest Number 解题报告

    原题地址: https://oj.leetcode.com/problems/largest-number/ 题目内容: Given a list of non negative integers, ...

  4. LeetCode: Valid Number 解题报告

    Valid NumberValidate if a given string is numeric. Some examples:"0" => true" 0.1 ...

  5. 【LeetCode】306. Additive Number 解题报告(Python)

    [LeetCode]306. Additive Number 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...

  6. LeetCode: Combination Sum 解题报告

    Combination Sum Combination Sum Total Accepted: 25850 Total Submissions: 96391 My Submissions Questi ...

  7. 【九度OJ】题目1040:Prime Number 解题报告

    [九度OJ]题目1040:Prime Number 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1040 题目描述: Ou ...

  8. [LeetCode] 179. Largest Number 解题思路

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

  9. [LeetCode] Largest Number 最大组合数

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

随机推荐

  1. python tkinter-容器、子窗体

      Frame f = tkinter.Frame(width=380, height=270, bg='white').pack() LabelFrame f = tkinter.LabelFram ...

  2. git根据用户过滤提交记录

    使用SourceTree 使用gitk

  3. 动态规划_线性dp

    https://www.cnblogs.com/31415926535x/p/10415694.html 线性dp是很基础的一种动态规划,,经典题和他的变种有很多,比如两个串的LCS,LIS,最大子序 ...

  4. 软工实践第五次作业-WordCount进阶需求

    软工实践作业(五) GitHub 作业链接 结对博客 031602240 具体分工 PSP表格 代码规范 解题思路与设计说明 爬虫使用 代码组织与内部实现设计(类图) 算法关键 实现方法 流程图 附加 ...

  5. mysql参数innodb_flush_log_at_trx_commit

    查看mysql数据库innodb_flush_log_at_trx_commit : mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_flush_log%'; ...

  6. git小笔记

    git账号:eggsy.cao@pictureworks.biz eggsycao 1.新建文件夹,并进入,命令窗口:git init 2.提交文件 git add fileName(git add ...

  7. android 6.0 动态权限

    Android 6.0 动态权限: 除了要在AndroidManifest.xml中申请外,还需使用时,请求用户允许授权. 以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整 ...

  8. Winform自动更新组件分享

    作者:圣殿骑士 出处:http://www.cnblogs.com/KnightsWarrior/ 关于作者:专注于微软平台项目架构.管理和企业解决方案.自认在面向对象及面向服务领域有一定的造诣,熟悉 ...

  9. Java中有哪些语法糖?

    不要你写汇编,Java句句是糖 不能同意上面的这句话,要说为什么,首先要定义下面要讲的“语法糖”. 语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,并没有给语言添加什么新东西,但是 ...

  10. 461.汉明距离(c++实现)

    问题描述: 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意:0 ≤ x, y < 231. 示例: 输入: x = ...