题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
这题的思路和字符串排列的一样的思路,递归,返回所有排列,排序,返回第一个序列。
代码(java):
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public String PrintMinNumber(int [] numbers) {
if(numbers.length==0)return "";
ArrayList<String>res=new ArrayList<String>();
permu(res,numbers,0);
Collections.sort(res);
return res.get(0);
}
public void permu(ArrayList<String>res,int []numbers,int start){
if(start==numbers.length-1){
StringBuffer result=new StringBuffer();
for(int val:numbers){
result.append(""+val);
}
String re=result.toString();
if(res.indexOf(re)<0)res.add(re);
}
else{
for(int i=start;i<numbers.length;i++){
int tmp=numbers[i];
numbers[i]=numbers[start];
numbers[start]=tmp;
permu(res,numbers,start+1);
tmp=numbers[i];
numbers[i]=numbers[start];
numbers[start]=tmp;
}
}
return;
}
}