算法实现-->全排列问题


import java.util.ArrayList;
import java.util.List;

/*
 * 全排列算法
 * 2013-13-29
 * By YananLee
 * 算法思想:利用递归思想对数组进行操作
 */
public class FullPerm {

	/*
	 *lst 要进行全排列的数组
	 *r   表示数组中第r之前的已经排好序,初始时为0,即所有位置都未确定
	 *length 表示lst中未排好序的长度
	 *算法思想:如果length=1 则已排好一次,输出数组 
	 *       否则就确定从第0位置开始确定数据
	 *        
	 */
	static void perm(ArrayList<String> lst,int r,int length)
	{
		if (length==1)
		{
			for (int i=0;i<lst.size();i++)
			{
				System.out.print(""+lst.get(i));
			}
			    System.out.println("");
		}
		else {
			 for(int i=r;i<lst.size();i++)
			 {
				// ArrayList<String>lstTmp=lst;
				// lstTmp.remove(i);
				 /*
				  String tmp=lst.get(r);
				  lst.set(i, tmp);
				  lst.set(r,lst.get(i));
				  */
				  swap(lst,r,i);//每次交换两个
				  perm(lst,r+1,length-1);//递归的调用
				  swap(lst,r,i);//还原数组 ,主要针对上上一步中的交换
				  
				// perm(lstTmp,i,length-1);
				 //System.out.println("  ");
			 }
		}
	
		
		
		
	}
	static void swap(ArrayList<String> lst,int i,int j)
	{
		//交换函数
		String tmp=lst.get(j);
	    lst.set(j,lst.get(i));
	    lst.set(i, tmp);
	   
	}
	public static void printArr(ArrayList lst)
	{    //对数组的输出函数
		System.out.println("输出数组:" );
		for(int i=0;i<lst.size();i++)
		{
			System.out.print(""+lst.get(i));
		}
		
	}
	public static void main(String args[])
	{
		ArrayList<String>  lst =new ArrayList();
		lst.add("a");lst.add("b");lst.add("c");lst.add("d");
		//printArr(lst);
		perm(lst,0,5);
		
	}
	
	
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值