剑指Offer—字符串排列
2016-05-12 20:20
274 查看
题目描述:输入一个字符串,打印出该字符串中字符的所有排列。
解析:step 1:求所有可能出现第一个位置的字符。把第一个字符与后面的每个字符交换。
step 2:固定第一个字符,将后面的字符利用递归进行全排列。
解析:step 1:求所有可能出现第一个位置的字符。把第一个字符与后面的每个字符交换。
step 2:固定第一个字符,将后面的字符利用递归进行全排列。
#include <iostream> #include <stdio.h> using namespace std; void StringPermutation(char *pStr,char *pBegin); //字符串排列 void Permutation(char *pStr) { if(pStr==NULL) return; StringPermutation(pStr,pStr); } void StringPermutation(char *pStr,char *pBegin) { if(*pBegin=='\0') printf("%s\n",pStr); else { for(char* pCh=pBegin;*pCh!='\0';++pCh) { //将第一个字符与后面的字符依次置换 char tem=*pCh; *pCh=*pBegin; *pBegin=tem; //递归遍历后面的字符 StringPermutation(pStr,pBegin+1); //递归完成后,将调换的字符还原。 tem=*pBegin; *pBegin=*pCh; *pCh=tem; } } } //测试代码 void Test(char *pStr) { if(pStr==NULL) printf("Test for NULL begins:\n"); else printf("Test for %s begins:\n",pStr); Permutation(pStr); printf("\n"); } int main() { //cout << "Hello world!" << endl; char s1[]=" "; Test(s1); char s2[]="a"; Test(s2); char s3[]="abc"; Test(s3); return 0; }
相关文章推荐
- The Lifecycle and Cascade of WeChat Social Messaging Groups-www2016-20160512
- JavaScript-父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序
- Caffe + Ubuntu 14.04 + CUDA 7.0 新手安装配置指南
- angJs使选中的li背景颜色不同
- Js中关于转义符的使用和单双引号的区别
- JavaScript
- js实现排序算法(冒泡、选择、插入、二分插入、快速)
- Jquery判断$("#id")获取的对象是否存在的方法
- 《AngularJS》--指令的相互调用
- cojs 简单的最近公共祖先 解题报告
- jQuery(1)--入口模块jQuery()
- VR开发 入门 使用Three.js 开发的WebVR demo
- jquery mobile上传图片完整例子(包含ios图片横向问题处理和C#后台图片压缩)
- jquery中的事件
- html初探
- EXTJS on事件
- 图片跟随鼠标移动(jquery)
- Nodejs in Visual Studio Code 11.前端工程优化
- javascript实现页面悬浮导航
- html5web存储