【剑指offer】面试题45:把数组排成最小的数
来源:互联网 发布:小学考试软件下载 编辑:程序博客网 时间:2024/05/22 15:41
题目
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
考虑到两个数字的拼接可能会出现溢出问题,所以该问题使用字符串来处理
可以转换成字符串排序问题
如数字a与数字b,拼接成字符串ab和字符串ba,
然后按照字典序进行比较,如果ab < ba,则数字a应该排在前面,否则反之
代码
public class _45_SortArrayForMinNumber { public static String PrintMinNumber(int [] numbers) { if(numbers == null || numbers.length == 0) return ""; TreeSet<String> set = new TreeSet<>(new Comparator<String>() { // 不应该出现0的情况 @Override public int compare(String o1, String o2) { return (o1 + o2).compareTo(o2 + o1) > 0 ? 1 : -1; } }); for(int number : numbers) { set.add(String.valueOf(number)); } StringBuilder sb = new StringBuilder(); for(String s : set) { sb.append(s); } return sb.toString(); }}
测试
public class _45_Test { public static void main(String[] args) { test1(); test2(); test3(); } private static void test1() { String s = _45_SortArrayForMinNumber.PrintMinNumber(new int[] {12, 123, 1}); MyTest.equal(s, "112123"); s = _45_SortArrayForMinNumber.PrintMinNumber(new int[] {43, 3, 134}); MyTest.equal(s, "134343"); s = _45_SortArrayForMinNumber.PrintMinNumber(new int[] {43, 4}); MyTest.equal(s, "434"); s = _45_SortArrayForMinNumber.PrintMinNumber(new int[] {45, 4}); MyTest.equal(s, "445"); } private static void test2() { String s = _45_SortArrayForMinNumber.PrintMinNumber(new int[] {4}); MyTest.equal(s, "4"); s = _45_SortArrayForMinNumber.PrintMinNumber(new int[] {1,111,1111}); MyTest.equal(s, "11111111"); } private static void test3() { String s = _45_SortArrayForMinNumber.PrintMinNumber(null); MyTest.equal(s, ""); s = _45_SortArrayForMinNumber.PrintMinNumber(new int[0]); MyTest.equal(s, ""); }}
阅读全文
0 0
- 剑指Offer面试题33把数组排成最小的数,面试题34丑数
- 【剑指offer】面试题33:把数组排成最小数
- 剑指Offer(第二版)面试题45:把数组排成最小的数
- 【剑指offer】面试题45:把数组排成最小的数
- 【剑指offer】面试题 45:把数组排成最小的数
- 《剑指Offer》面试题:把数组排成最小的数和qsort函数的一点介绍
- [剑指offer][面试题33]把数组排成最小的数
- 面试题33:把数组排成最小的数--《剑指offer》
- 剑指Offer:面试题33 把数组排成最小的数
- 剑指offer 面试题33—把数组排成最小的数
- 《剑指Offer》学习笔记--面试题33:把数组排成最小的数
- 《剑指Offer》面试题33:把数组排成最小的数
- 【剑指Offer学习】【面试题33:把数组排成最小的数】
- 【剑指Offer面试题】 九度OJ1504:把数组排成最小的数
- 剑指Offer面试题33(java版):把数组排成最小的数
- 【剑指offer】5.2时间效率——面试题33:把数组排成最小的数
- 剑指offer面试题之把数组排成最小的数
- 剑指offer-面试题33:把数组排成最小的数
- 判断两条线段是否相交
- 机器学习基础-学习笔记 概率论
- JavaScript创建对象
- Bootstrap学习
- 【剑指offer】面试题3:数组中重复的数字
- 【剑指offer】面试题45:把数组排成最小的数
- 基于Linux的网络平台
- HBase Shell及JavaAPI操作
- VMware虚拟机克隆Linux系统后找不到eth0网卡的问题解决
- Spring-国际化信息02-MessageSource接口
- LUA 元表与元方法
- LUA 构造类
- Hibernate中的lazy(懒加载)属性
- 数据库事务隔离级别