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

本文共 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

你可能感兴趣的文章
copy与mutableCopy
查看>>
C#中结构函数和析构函数的用法
查看>>
CC2540串口输出调试功能
查看>>
px,dp,sp三者的转换
查看>>
java导出Excel工具类
查看>>
malloc calloc realloc,new区别联系以及什么时候用
查看>>
用ES6巧妙的解决传统面试中的算法小问题!
查看>>
php socket 编程(一)
查看>>
SDUT 简单枚举类型——植物与颜色
查看>>
Windows 下配置Git
查看>>
HTML5触摸事件(touchstart、touchmove和touchend)
查看>>
Vue项目中的mock数据
查看>>
关于Scott用户
查看>>
web.py框架之i18n支持
查看>>
PHP cURL
查看>>
Python 5 面向对象进阶
查看>>
PHP中的验证码类(验证码功能设计之二)
查看>>
迭代器
查看>>
移动互联网企业“六步”轻松实现移动安全战略部署!
查看>>
MySQL存储过程-遍历游标的例子
查看>>