输入一个正整数数组,把数组里面所有的数字拼接起来排成一个数,打印能拼接出所有数字中最小的一个,例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。这个就是排列组合算法中的基础版。
以下为上述问题的java代码实现:
package niukewang;
import java.util.Scanner;
public class Minnumber {
public static int MIN_VALUE=Integer.MAX_VALUE;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int len = str.split(" ").length;
int[] numbers = new int[len];
for(int i=0;i<len;i++) {
numbers[i] = Integer.valueOf(str.split(" ")[i]);
}
int[] a = new int[len];
combine(numbers,len,a,0);
System.out.println(MIN_VALUE);
}
public static void combine(int[] numbers,int n,int[] a,int k) {
if(k<=n-1) {
for (int i=0;i<n;i++) {
a[k] = numbers[i];
int u=0;
for(int j=0;j<k;j++) {
if(a[k]==a[j])
u=1;
}
if(u==0) {
if(k==n-1) {
String temp = "";
for(int j=0;j<n;j++) {
temp += a[j];
}
if(MIN_VALUE>Integer.valueOf(temp))
MIN_VALUE = Integer.valueOf(temp);
} else
combine(numbers,n,a,k+1);
}
}
}
}
}