面试题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
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28 字符串的全排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28—字符串的排列
- 面试题28:字符串排列
- 程序员面试题精选(28):字符串的排列
- 程序员面试题精选100题(28)-字符串的排列
- 微软,Google面试题 (28) —— 字符串的排列
- 程序员面试题精选100题(28)-字符串的排列
- JAVA好书推荐
- UVA 699 The Falling Leaves
- 使用GetText本地化编程
- 最近邻算法的实现:k-d tree
- GTK+ 程序使用gettext国际化小结
- 面试题28:字符串的排列
- 说说“平衡”
- VC6.0开发OCX按钮控件
- 笔记
- 物化视图
- UVA 548 tree
- sqlconnection,sqlcommand,sqldataadapter,sqldatareader,dataset
- poj 3017 Cut the Sequence(DP+单调队列)
- MyBatis的动态SQL详解