把数组排成最小的数
来源:互联网 发布:国内旅游收入数据1978 编辑:程序博客网 时间:2024/05/29 18:52
题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
1.本题可抽象为一个排序问题,把数组按从小到大排好序,然后遍历,小的放前面,大的放后面,即得所求。
2.问题就在于:这个排序问题中,两个数之间比较的时候,怎么算大,怎么算小。
“456”跟”123”,”456”应该放后面,而”456”>”123”,没问题 ;
而 “3”跟”321”,”3”应该放后面,但”321”>”3”,这个是有问题。
类似的 “12”和”123”,”12321”和”123”,”54345”和”543”等。
4.a+b和b+a是隐形的大数问题,要转换为String。借用String的compareTo()方法比较比较s1=a+”“+b 和s2= b+”“+a的大小。
5.创建比较器按我们定义的规则比较。
6.时间复杂度:
java实现:
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;public class Solution { public String PrintMinNumber(int [] numbers) { String str = ""; if(numbers == null || numbers.length <= 0) return str; ArrayList<Integer> al = new ArrayList<Integer>(); for(int i = 0; i < numbers.length; i ++){ al.add(numbers[i]); } Collections.sort(al, new Comparator<Integer>(){ //创建比较器,按照比较器定义的比较规则排序 public int compare(Integer first, Integer second){ String s1 = first + "" + second; //强制转换为String类型 String s2 = second + "" + first; return s1.compareTo(s2); } }); for(int i : al){ str += i; } return str; }}
阅读全文
0 0
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数--总结
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- Jprofiler远程连接linux项目监控
- Codeforces Round #418 (Div. 2) B. An express train to reveries
- springboot集成dubbo,dubbox分布式服务框架
- VS 无法启动 IIS Express Web 服务器
- 深入探究Connect函数(知识点整合)
- 把数组排成最小的数
- STM32F40x/STM32F41x in-application programming using the USART中文版
- bzoj3110[Zjoi2013]K大数查询 主席树套线段树
- VS删除一行代码快捷键
- 三维重建方法--激光or视觉
- 机房个人重构之原型图、ER图(上)
- Ubuntu16.04中MySQL安装配置及修改字符集编码
- CEF关闭或者退出时报错崩溃问题原因
- c++用模板类封装了队列 提高了可重用性