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. kruskal证明

    Kruskal算法证明   易证,对于一个无向加权连通图,总是存在一棵或以上的有限课生成树,而这些生成树中肯定存在至少一棵最小生成树.下面证明Kruskal算法构造的生成树是这些最小生成树中的一棵. ...

  2. 什么?作为程序员的你还不知道怎么访问 Google

    今天就一个目的,让你可以FQ成功,其他人我不知道,但就程序员来说,不能使用 Google 那真是一大损失,当然还有对所有人适用的 YouTobu 这个视频网站,资源多的没话说,别的不说,学习英语很方便 ...

  3. Java基础--对象的克隆

    文章转载自https://www.cnblogs.com/Qian123/p/5710533.html 阅读目录 为什么要克隆? 如何实现克隆 浅克隆和深克隆 解决多层克隆问题 总结 假如说你想复制一 ...

  4. IdentityServer4-主题

    一.Startup 二.定义Resources 三.定义Clients 四.登录 五.使用外部身份提供商登录 六.Windows身份验证 七.登出 八.注销外部身份提供商 九.联合注销 十.联合网关 ...

  5. tomcat配置问题

    1.首先安装JDK和Tomcat(我的tomcat是解压缩版的) 2.配置JDK环境变量 3.配置tomcat环境变量 4.在MyEcliipse中配置JDK(可以使用MyEclipse自带的tomc ...

  6. netbeans连接数据库SQLserver2008

    数据库设置 第一步:配置SQL,打开SQL server 2008文件下的配置工具里的SQL server配置管理器 设置MSSQLSERVER协议中,开启TCP/IP,端口设置为1433 在SQL ...

  7. js selection对象使用方法

    IE:document.selection FireFox:window.getSelection() document.selection只有IE支持,window.getSelection()也只 ...

  8. iphone程序适配ipad可以用下面的宏进行尺寸改写

    //判断是否为iPad #define ISIPAD [[[UIDevice currentDevice].model substringToIndex:4] isEqualToString:@&qu ...

  9. 全排列(Perm)的递归实现算法

    https://blog.csdn.net/zhi_jin/article/details/69267230 什么是全排列] 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个 ...

  10. C#代码安装Windows服务

    using System;using System.Collections.Generic;using System.ServiceProcess;using System.Configuration ...