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, 30, 34, 5, 9]->9534330

   ②[121,12]->12121

   ③[0,0]  -> 0

(1)将数组的数字组合,这隐含着一个大数问题,所以不可以直接用int或者long来保存结果,需要用到字符串(也可以用数组).

(2)字符串m与字符串n拼接,可以成为mn或者nm。要比较mn与nm的大小,不能直接用Arrays.sort()函数,这个函数排序后的结果为升序,重写Comparator 实现降序,才能组成最大的数字。

(3)字符串m与n的大小比较规则:当mn>nm时,m>n;

                  当mn=nm时,m=n;

                  当mn<nm时,m<n;

(4)字符串的比较规则:str1="abcda";str2="abcdb";当比较到第五个字符str1为a,str2为b  。a的ASCII码小于b的ASCII码。所以str1<str2

下面的代码 直接使用 Arrays.sort(com, new Comparator<Object>() { .....});在sort函数中重写 Comparator<Object>(),效率略低。跑完leetcode上的样例需要334ms。

public String largestNumber(int[] nums) {
if (nums == null)
return null;
int len = nums.length;
String[] com = new String[len];
int all0 = ;
for (int i = ; i < len; i++) {
if (nums[i] == ) {
all0++;
System.out.println("~~~" + all0);
}
com[i] = Integer.toString(nums[i]);
}
Arrays.sort(com, new Comparator<Object>() {
public int compare(Object obj1, Object obj2) {
String str1 = (String) obj1;
String str2 = (String) obj2;
String com1 = str1 + str2;
System.out.println("com1:" + com1);
String com2 = str2 + str1;
System.out.println("com2:" + com2);
if (com1.compareTo(com2) >= ) {
System.out.println("com1<com2");
return -;
} else {
System.out.println("com1>com2");
return ;
}
}
}); String ans = "";
for (int i = ; i < len; i++) {
ans += com[i];
}
if (all0 == len)
ans = "";
return ans;
}

做出以下改进 拍完样例的时间为120ms

Comparator<String> comp = new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
String s1 = str1 + str2;
String s2 = str2 + str1;
return s2.compareTo(s1);
// reverse order here, so we can do append() later
}
};
Arrays.sort(com, comp);

最新文章

  1. 串口 COM口 TTL RS-232 RS-485 区别 释疑
  2. Generate transparent shape on image
  3. python反弹tty shell
  4. vijos p1523 贪吃的九头龙 思考思考再思考,就荒废了4小时
  5. java 线程的几种状态
  6. mysql出现Waiting for table metadata lock的原因及解决方案
  7. SQL Server扫盲系列——镜像篇
  8. 我的 FPGA 学习历程(12)—— 电子钟项目准备
  9. Groovy 设计模式 -- 装饰器模式
  10. Freemarker 对于数字的循环
  11. 向后台提交数据:利用cookie加session提交更多数据,
  12. 阿里Java面经大全(整合版)
  13. 06 Go 1.6 Release Notes
  14. 【Unity】12.1 基本概念
  15. 解决windows7笔记本下玩游戏的显示问题
  16. MySQL插入emoji表情失败问题的解决方法
  17. 原生JS,实现图片可拖拽,并且移动四个角和四条变能够自由变换图片大小
  18. rancher下的kubernetes之一:构建标准化vmware镜像
  19. Angular material mat-icon 资源参考_Navigation
  20. python中模块与包的概念

热门文章

  1. espcomm_send_command: didn&#39;t receive command response | espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed |arduino wemos d1 无法上传
  2. Python安装tesserocr遇到的各种问题及解决办法
  3. python教程(四)&#183;序列
  4. 001---mysql
  5. springboot(eureka子项目)+idea+jsp 404问题
  6. 20155222 2016-2017-2 《Java程序设计》实验一
  7. 20155234 2016-2017-2第十周《Java学习笔记》学习总结
  8. 安装虚拟机以及学习Linux基础入门
  9. 20155338 2016-2017-2 《JAVA程序设计》课程总结
  10. Cache-Aside模式