算法——全排列问题

16 篇文章 3 订阅

问题

求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);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值