算法——全排列问题

版权声明:版权声明:转载必须注明本文转自StathamJ的博客:https://blog.csdn.net/qq_41664447 https://blog.csdn.net/qq_41664447/article/details/88769273

问题

求n个元素的全排列。
eg:

  • 输入:a b c
  • 输出:abc acb bac bca cab cba

思路

将这n个元素看做一个数组,我们用一个数值k(从0开始)来代表某个元素的位置索引,那么让数组中每一个元素与k进行一次交换,然后将k加1继续调用递归,最后回溯(将交换位置后的数组还原)。

实现代码

package suanfa;
//k:当前的交换位置
//让k后面的每个元素与k交换
public class AllList {
	public static void f(char[] data,int k)
	{
		if(k==data.length-1)
		{
			for(int i=0;i<data.length;i++)
			{
				System.out.print(data[i]+" ");
			}
			System.out.println();
		}
		for(int i=k;i<data.length;i++)
		{
			{//试探
				char t=data[k];
				data[k]=data[i];
				data[i]=t;
			}
			f(data,k+1);
			{//回溯
				char t=data[k];
				data[k]=data[i];
				data[i]=t;
			}
		}
	}
	public static void main(String[] args) {
		char[] data="ABCDE".toCharArray();
		f(data,0);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41664447/article/details/88769273