递归法:求n个元素的全排列

问题:求n个元素的全排列
举例:ABC 其全排列有ABC ACB BAC BCA CAB CBA
方法:采用分割的思想把第一个元素和后面的其他元素分开思考将问题简单化

public class Quan {
  public static void f(char[] data,int k) //k为当前需要交换元素的位置,与它后面的元素交换
  {
	  if(k==data.length) {  //当k交换到最后一个元素的位置时,打印输出结果
		  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];  //对k进行交换
		  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="ABC".toCharArray();
	f(data,0);
}

在这里插入图片描述

发布了65 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/gl620321/article/details/104271737