【追求进步】把数组排成最小的数
2016-04-06 10:42
225 查看
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。在线代码:
import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; public class Solution { public String PrintMinNumber(int [] numbers) { /*初步的想法是全排列,所有的全排列彼此比较大小。 根据排列的知识,n个数字总共有n!个排列; 第二种方法:即就是找到排序规则,数组根据排序规则进行排序则就是最小的数字 即就是合并之后int溢出的隐患,因此把数字转换成字符串,比较它们的大小只需要 按照字符串大小的比较规则就可以了。 */ if(numbers==null||numbers.length==0){ return "";//如果数字是空的,则返回空 } int len=numbers.length; String[] str=new String[len];//字符串数组 StringBuilder sb=new StringBuilder(); for(int i=0;i<len;i++){ str[i]=String.valueOf(numbers[i]);//先将整型数组转换成String数组 } Arrays.sort(str,new Comparator<String>(){ @Override public int compare(String s1, String s2) { String c1 = s1 + s2; String c2 = s2 + s1; return c1.compareTo(c2); //比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较 } });//将String数组排序 for(int i=0;i<len;i++){ sb.append(str[i]);//将排好序的字符串数组拼接出来 } return sb.toString(); } /* * 解题思路: * 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。 * 排序规则如下: * 若ab > ba 则 a > b, * 若ab < ba 则 a < b, * 若ab = ba 则 a = b; * 解释说明: * 比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较 */ }
相关文章推荐
- java高级之callable与future
- cannot be opened because the project file cannot be parsed
- 里氏替换原则LSP
- cglib与JDK动态代理适用场景
- ubuntu14.04 libgtk-x11-2.0.so.0
- 《leetCode》:Rectangle Area
- Git提交错误:RPC failed; result=22, HTTP code = 411
- eclipse 错误:Description Resource Path Location Type Target runtime
- Linux设备驱动开发详解总结(二)之并发与竞争
- GPU&VS2012&CUDA&matlab&Arrayfire杂记(三)——cuda
- PHP的启动与终止
- (2016春) 作业5:需求分析
- C# Excel操作类
- opencv 4000 视频逐帧处理时结果显示不了的问题已解决
- 如何接手老代码的讨论,笔者亲身参与
- 如果不想使用编译器自动生成的函数,就应该明确拒绝
- java GC文章
- android txt小说阅读器的实现(完美实现分页阅读,支持常见编码格式)
- 第二部分 Nhibernate中的类型
- TCP之非阻塞connect和accept