博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串递归
阅读量:5809 次
发布时间:2019-06-18

本文共 1578 字,大约阅读时间需要 5 分钟。

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中

还是先来一张图片比较好说明:先固定好第一个数,然后后面的数再一次排列。如下图(0,3)代表【0,3)。(1,3)代表【1,3)

 

例一:

#include 
#include
#include
void f(char *str, int len, int n){ int i; char tmp; char *p = (char *)malloc(sizeof(*str)); if(n==len-1){ //只剩一个元素 printf("%s\n",str); //打印 }else{ for(i=n;i

 参考文章:

实现二:

#include 
#include
//函数功能 : 求一个字符串某个区间内字符的全排列 //函数参数 : pStr为字符串,begin和end表示区间 //返回值 : 无 //九度1369 void swap(char *a,char *b){ char temp; temp=*a; *a=*b; *b==temp; }void Permutation_Solution1(char *pStr, int begin, int end) { char *p = (char *)malloc(sizeof(*pStr)); if(begin == end - 1) //只剩一个元素 { int i; //for(i = 0; i < end; i++) //打印 printf("%c\n",pStr[i]); printf("%s\n",pStr); } else { int k; char tmp; for(k = begin; k < end; k++) { strcpy(p,pStr); tmp = *(pStr+begin); //交换两个字符 *(pStr+begin) = *(pStr+k); *(pStr+k) = tmp; Permutation_Solution1(pStr, begin + 1, end); //递归 strcpy(pStr,p); } } } int main(void){ char str[] = "abc"; int len = strlen(str); Permutation_Solution1(str, 0, len); return 0;}

 

例一去掉重复的排列应该可以通过

转载于:https://www.cnblogs.com/bluewelkin/p/4104026.html

你可能感兴趣的文章
Symantec Endpoint Protection下载方法
查看>>
统治世界的十大算法
查看>>
mac安装gcc
查看>>
网络磁盘映射策略脚本
查看>>
linux svn安装和配置
查看>>
SSH中调用另一action的方法(chain,redirect)
查看>>
数据库基础
查看>>
表格排序
查看>>
updatepanel中的GridView中的radiobuttonList怎么设置样式
查看>>
快速学习javaSE基础4---面向对象的编程
查看>>
关于Android四大组件的学习总结
查看>>
LeetCode 398: Random Pick Index
查看>>
uva live 7638 Number of Connected Components (并查集)
查看>>
Linux下设置svn开机自启动
查看>>
java只能的round,ceil,floor方法的使用
查看>>
雷公藤多甙治疗类风湿关节炎遭质疑
查看>>
Web前端开发学习误区,你掉进去了没?
查看>>
由于无法创建应用程序域,因此未能执行请求。错误: 0x80070002 系统找不到指定的文件...
查看>>
新开的博客,为自己祝贺一下
查看>>
numpy模块资源
查看>>