50,526
社区成员
发帖
与我相关
我的任务
分享
import java.util.Arrays;
public class Permutation {
public static void main(String[] args){
int[] array=new int[]{1, 2,3,4,5,6};
permute(array,0);
}
public static void permute(int a[],int s){
if(s==a.length){
System.out.println(Arrays.toString(a));
}
else
for(int i=s;i<a.length;++i){
swap(a,s,i);
permute(a,s+1);
swap(a,s,i);
}
}
private static void swap(int[] a,int s,int i) {
int t=a[s];
a[s]=a[i];
a[i]=t;
}
}
import java.util.Arrays; //用于数组输出。
import java.util.LinkedList;
import java.util.List;
public class TestArrange
{
static String toBeArranged ="123456"; //待排列的字符串。
static String[] array = stringToStringArray(toBeArranged); //将其转换成数组。{"1","2"...}
static int length=array.length; //字符串长度。
static int k=0; //存放数组时计数。
static String[] result=new String[total(length)]; //数组大小是length的阶乘。
public static void main(String[] args)
{
listAll(Arrays.asList(array), "");
System.out.println(Arrays.toString(result)); //输出。
}
//主要的计算方法。
public static void listAll(List candidate, String prefix)
{
if(prefix.length()==length) //小于字符串长度的组合忽略。
{
result[k++]=prefix; //存放数组里。
}
for(int i=0;i<candidate.size();i++)
{
List tmp = new LinkedList(candidate);
{
listAll(tmp, prefix + tmp.remove(i)); //函数中的参数从右边开始解析
}
}
}
//将字符串转成数组。
static String[] stringToStringArray(String s)
{
int length=s.length();
if(length<=0)
{
return new String[0];
}
String[] result=new String[length];
for(int i=0;i<length;i++)
{
result[i]=""+s.charAt(i);
}
return result;
}
//计算number阶乘,为结果数组的容量。
static int total(int number)
{
int number1=1;
for(int i=1;i<=number;i++)
{
number1*=i;
}
return number1;
}
}