递归实现全排列
2016-03-12 12:32
441 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ly__snow/article/details/50864857
首先,递归的出口:X==Z,
全排列:以x,y,z为例
先固定x,对y和z进行全排列,
swap(a,a),getAllOrder(b,c)进入递归函数,swap(b,b),getAllOrder(c,c)
在进入递归满足第一个if,所以输出abc;返回递归函数上一级,swap(b,b),i+1。swap(b,c)后,begin=c,进入getAllOrder(c,c)满足第一个if输出acb,返回递归函数最上一级后,进入第二个swap(a,a),i++后,进入第一个swap(a,b)b作为递归的头头,即begin=b,相当于固定了b;getAllOrder(c,c);满足第一个if,输出bac。同理继续递归
package lianxi; import java.util.Arrays; public class 全排列 { static String[]array={"x","y","z"}; public static void main(String[] args) { getAllOrder(0,array.length-1); } public static void getAllOrder(int begin,int end) { if(begin==end) { for (int i=0;i<array.length;i++) { System.out.print(array[i]); } System.out.println(); } else { for(int i=begin;i<=end;i++) {//交换数据 swap(begin,i); getAllOrder(begin+1,end); swap(i,begin); } } } public static void swap(int from,int to) { if(from==to) return; String tmp=array[from]; array[from]=array[to]; array[to]=tmp; } }
相关文章推荐
- 字符串排列递归和非递归实现
- 编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中 的字符串操作函数。
- 数组全排列---递归方法实现(java)
- 百度面试题:将一个字符串数组中的字母按照以下规则排列:表中任何单词的首字母与其前面单词的尾字母相同! 要求:字符串只由小写字母构成,且每个字符串长度在2-100之间(Java递归实现)
- 全排列非递归实现
- c/c++递归实现排列Permutations
- 递归实现字符数组的全排列及组合
- 递归实现数字排列组合
- 用递归实现n的排列
- 全排列非递归实现
- 全排列算法原理和实现-----用递归方式实现
- 全排列递归实现算法
- 编写一个函数reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。
- Java递归实现字符串全排列
- 字符串的递归排列实现
- 求数组全排列算法的递归实现
- 字符串全排列 Java递归实现
- C语言:编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。
- C语言:编写reverse_string(char * string)(递归实现)函数,将参数字符串中的字符反向排列
- 递归与非递归:实现求第n个斐波那契数。实现n^k。输入一个非负整数,返回组成它的数字之和。将参数字符串中的字符反向排列。实现strlen。求n的阶乘。打印一个整数的每一位。