n个字符的全排列,m个数中n个数的排列及扩展运用

数组的全排列:给定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);  
    }
	
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值