问题:给定一个字符串,实现他的全排列,如”abc"全排列为abc,acb,bac,bca,cab,cba.
细究,就可以将其理解为一中递归思想。
f(abc)=a+f(bc),f(bc)=b+f©,f©=c;
下文给出两种解决放大。一个用相对比较古老的两数交换的C语言方法,一个用到STL两种算法。
如下代码
void swap(char* a, char* b) { char temp = *a; *a = *b; *b = temp; } void Permutation(char* pStr, char* pPostion) { // 基准点 if (*pPostion == '') { cout << pStr << endl; } else { for (char* pChar = pPostion; *pChar != ''; pChar++) { // 依次和后面的字符交换 swap(*pChar, *pPostion); Permutation(pStr, pPostion + 1); // 换回来 swap(*pChar, *pPostion); } } } int main() { char test[] = "132"; Permutation(test, test); cout << endl; // 用STL输出全排列 // 注意:必须要保证数组顺序, do { cout << test[0] << test[1] << test[2] << endl; } while (next_permutation(test, test + 3)); cout << endl; char test2[] = "321"; // 注意:必须要保证数组顺序, do { cout << test2[0] << test2[1] << test2[2] << endl; } while (prev_permutation(test2, test2 + 3)); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)