把数组排成最小的数

来源:互联网 发布:qq视频变脸软件 编辑:程序博客网 时间:2024/06/03 20:53
 


题目描述

输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
如给定数组:{2,1}
则排出的最小数字为:12

输入

输入为字符串,其格式为“{数字,数字,……}”

输出

排出的最小数字

样例输入

{2,1}

样例输出

12

提示

NO

地区

成都研究所

产品线

公共

阶段

招聘

难度

2

方法一:按照字符串大小的比较规则

public String getMinDigit(String input){String[] inArr=input.split(",");int len=inArr.length;Arrays.sort(inArr, new Comparator<String>(){@Overridepublic int compare(String o1, String o2) {return (o1+o2).compareTo(o2+o1);}});StringBuilder sb=new StringBuilder();for(int i=0;i<len;i++){sb.append(inArr[i]);}return sb.toString();}


 方法二:全排列

 

public String getMinDigitByArrange(String input){String[] strArr=input.split(",");int len=strArr.length;int[] inArr=new int[len];for(int i=0;i<len;i++){inArr[i]=Integer.valueOf(strArr[i]);}List<String> list=new ArrayList<String>();arrange(inArr,0,len,list);    String min=list.get(0);for(String s:list){if(s.compareTo(min)<0)min=s;}return min;}public void arrange(int[] inArr,int start,int len,List<String> list){if(start==len-1){StringBuilder sb=new StringBuilder();for(int i=0;i<inArr.length;i++){sb.append(inArr[i]);}list.add(sb.toString());}else{for(int i=start;i<len;i++){swap(inArr,start,i);arrange(inArr,start+1,len,list);swap(inArr,start,i);}}}  public void swap(int[] inArr, int i, int j) {int temp=inArr[i];inArr[i]=inArr[j];inArr[j]=temp;}


原创粉丝点击