数组的全排列:给定N个不同的字符,并输出其全排列形式,例如ABC,输出
ABC,
ACB,
BAC,
BCA,
CAB,
CBA的形式
import java.util.Scanner;
import java.util.Vector;
public class Demo1 {
private static void func(Vector<Integer> source,Vector<Integer> result) {
// TODO Auto-generated method stub
if(source.size() == 0) {
for(int i = 0 ; i < result.size();i++) {
System.out.print(result.elementAt(i));
}
System.out.println();
}
for(int i = 0 ; i < source.size();i++) {
Vector<Integer> a_source = new Vector<Integer>(source);
Vector<Integer> a_result = new Vector<Integer>(result);
a_result.add(a_source.elementAt(i));
a_source.removeElementAt(i);
func(a_source,a_result);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Vector<Integer> source = new Vector<Integer>();
Vector<Integer> result = new Vector<Integer>();
int n = sc.nextInt();
for(int i = 1; i <= n;i++ ) {
source.add(i);
}
func(source,result);
}
}
可以当作是模板,用于abc+cde=fgh,ab*cd=ef*ghi;(其中字母全部不相同)之类的acm题,你肯定一眼就可以看出来,在func函数中,改变并且,验证就可以输出答案。
m个数中n个数的排列:
import java.util.ArrayList;
import java.util.List;
public class Test {
static int count=0;
private static void f(List<Integer> lis,int start) {
// TODO Auto-generated method stub
if(start >= lis.size()) {
System.out.println(lis);//输出排列组合
count++;
return;
}
for(int i = 1; i <= 6;i++) {
if(!lis.contains(i)) {
lis.set(start, i);//修改元素
}else {
continue;
}
f(lis,start+1);//递归修改每个元素
lis.set(start, -1);//还原
}
}
public static void main(String[] args) {
int n = 5;
List<Integer> lis = new ArrayList<Integer>();
for(int i = 0 ; i < n;i++) {
lis.add(-1);
}
f(lis,0);
System.out.println("all of the number:"+count);
}
}