字符串全排列算法
问题描述
给出一个字符串(可能包含字母和数字)给出该字符串中字符的所有非重复排列
例子
输入:abc
输出:abc, acb, bac, bca, cab, cba
分析
1.典型的递归方法
- 递归问题分解
假设求解长度为n字符串的全排列,将字符串划分为首字符和剩余的n-1个字符串,将首字符与字符串中每个字符进行交换,加上每次交换后剩余长度n-1个字符串的全排列。
对于n-1个字符串的全排列,又可以继续分解为首字符与n-2个字符串的全排列,接下来按照相同步骤进行递归分解。 - 递归终止条件
按照上述递归问题的分解,当字符串中只剩下最后一个字符时,不需要进行交换,此时递归达到终止条件。
实例分析
下面对上述例子字符串“abc”进行分析,此时字符串长度为3,首字符为‘a’。
第一层递归:
1 ‘a’与第一个字符交换,即与本身交换,字符串不变为“abc”,首字符依旧为‘a’,问题分解为求长度为2的字符串“bc”的全排列。
第二层递归
<