一个字符串,打印出所有的排列组合,如"abc",所有的排列组合为abc,acb,bac,bca,cba,cab
思路: 先确定第一位字符,问题转化为求解后面n-1个字符的排列组合问题,可以使用递归的方式解决。第一位字符可以是字符串中的任何一个字符,所以需要把每一个字符交换到首位,先使用循环,循环里面调用递归函数。
C++
.h
#ifndef Arrangement_h
#define Arrangement_h
#include <stdio.h>
#endif /* Arrangement_h */
void printArrangement(char *str);
.cpp
#include "Arrangement.h"
#include <iostream>
void printArragementWithBegin(char *str, char *begin){
if (*begin == '\0') {
std::cout<<str<<std::endl;
} else {
for (char *p = begin; *p != '\0'; p++) {
char tmp = *p;
*p = *begin;
*begin = tmp;
printArragementWithBegin(str, begin + 1);
tmp = *p;
*p = *begin;
*begin = tmp;
}
}
}
void printArrangement(char *str){
if (str == NULL) {
return;
}
printArragementWithBegin(str, str);
}
main
#include <iostream>
#include "Arrangement.h"
int main(int argc, const char * argv[]) {
char str[] = "abc";
printArrangement(str);
return 0;
}