网上关于字符串全排列的代码一大堆,总体而言分为递归法和非递归法两种实现。虽然递归法原理简单,代码简洁,但是我观察众多博客来看,没有把代码讲透,只有透过代码才能看清算法的本质。
问题:输入一字符串(要求不存在重复字符),打印出该字符串中字符中字符的所有排列。
例如:输入”abc”,输出结果为abc, acb, bac, bca, cab和cba。
递归思路:看成两步:
1、首先求所有可能出现在第一个位置的字符,可以把第一个字符和后面的字符一次交换;
2、固定第一个字符后,求后面字符的全排列,过程类似第一个字符的取法,即递归调用
也可以这么理解,f(abc) = a + f(bc), f(bc) = b + f(c),
讲了基本的思想,我们还是重点来看代码(这是网上摘抄,非作者本人所写),通过代码就能很好的理解了。
#include<iostream>
using namespace std;
#include<assert.h>
void