题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路
递归实现,将数组转为字符串数组,传入递归函数中,每次传入初始数字的位置,当初始位置为数组大小则将str写入List中返回
源码
import java.util.*;
public class Solution {
public String PrintMinNumber(int [] numbers) {
ArrayList<String> re = new ArrayList<>();
if(numbers.length == 0)
return "";
String[] strArray = new String[numbers.length];
String str;
for(int i=0;i<numbers.length;i++){
str = Integer.toString(numbers[i]);
strArray[i] = str;
}
a(strArray,0,re);
Collections.sort(re);
return re.get(0);
}
public static void a(String[] strArray,int begin,ArrayList<String> re)
{
String str="";
if(begin == strArray.length-1) {
for(int i=0;i<strArray.length;i++)
str +=strArray[i];
//System.out.println(str);
re.add(str);
}
else{
for(int i=begin;i<strArray.length;i++)
{
String temp = strArray[begin];
strArray[begin] = strArray[i];
strArray[i] = temp;
a(strArray,begin+1,re);
strArray[i] = strArray[begin];
strArray[begin] = temp;
}
}
}
}