递归实现
定义一个递归函数permutation(string str, int start, int end),该函数的功能是生成下一个全排列数组。每次递归确定好前缀元素,然后对后面剩余的元素排列,递归此过程。
/**
* str是输入的数组
* start和end代表剩余待排列数组的起始和终点
*/
int cnt = 0;
void permutation(string str, int start, int end) {
if (start == end) { // 4.当start到end的位置时,即排列到尾了
s.insert(str);
//cout << str << endl;
cnt++;
return ;
}
for (int i = start; i <= end; i++) {
swap(str[i], str[start]); // 1.每次交换,把元素轮流放到start位置,即固定前缀元素
permutation(str, start + 1, end);// 2.因为头固定好了,所以排列下一位开始的数组
swap(str[i], str[start]);// 3.用完要归位,不然乱套了
}
}