面试题28:字符串的排列

来源:互联网 发布:淘宝昵称是什么 编辑:程序博客网 时间:2024/05/17 05:08

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印,abc,acb,bac,bca,cab,cba

思路:

1,求所有可能出现在第一个位置的字符,即把第一个字符与后面所有的字符交换

2,固定第一个字符,求后面所有字符的排列。

3,这时候求后面字符排列,做递归,重复1,2

源代码:

#include <stdlib.h>  #include <stdio.h>  #include <string.h> int f(int n){if(n==1)return 1;return n*f(n-1);}void swap1(char* p,char* q){char* temp;temp=p;p=q;q=temp;}void swap(char* p,char* q){char temp;temp=*p;*p=*q;*q=temp;}void Permutation(char* pRoot,char* pBegin){//printf("%s",pRoot);    if(*pBegin == '\0')printf("%s\n",pRoot);else{char *pCh;for(pCh=pBegin;*pCh != '\0';++pCh){swap(pCh,pBegin);Permutation(pRoot,pBegin+1);swap(pCh,pBegin);}}}void Permutation1(char* pRoot){if(pRoot == NULL)return;Permutation(pRoot,pRoot);}void main(){char p='p',q='q';printf("p:%c",p);printf("q:%c",q);swap(&p,&q);printf("p:%c",p);printf("q:%c\n\0",q);char c[50];gets(c);//c[strlen(c)]='\0';//printf("%s",c);Permutation1(c);}

结果:

p:pq:qp:qq:pabcdabcdabdcacbdacdbadcbadbcbacdbadcbcadbcdabdcabdaccbadcbdacabdcadbcdabcdbadbcadbacdcbadcabdacbdabc


原创粉丝点击