题目描述
输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
如给定数组:{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>(){
@Override
public 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;
}