题目:

输入一字符串,输出字符串的所有排列

分析:

我们以三个字符abc为例。首先我们固定第一个字符a,求后面两个字符bc的全排列。当bc的排列求好之后,这就是一部分解;

现在我们把第一个字符a和后面的字符b交换得到bac,固定第一个字符b,求后面两个字符ac的全排列。当ac的排列求好之后,这是另外一部分解;

接着我们该把c放在第一个位置了,为了确保这次c是和原先处于第一位置的a交换,必须把b和a交换回来,得到abc,然后再把c交换到第一位置得到cba,固定第一个字符c,求后面两个字符ba的全排列。当ba的排列求好之后,这是另外一部分解;

三部分解组成所有的解。

又如abcd

abcd

a{bcd的排列}//得到部分解

abcd //进入下一次循环保证字符交换回来

abcd

bacd

b{acd的排列}//得到部分解

abcd //进入下一次循环保证字符交换回来

abcd

cbad

c{bad的排列}//得到部分解

abcd //进入下一次循环保证字符交换回来

abcd

dbca

d{bcd的排列}//得到部分解

abcd //进入下一次循环保证字符交换回来

下面是代码:

void Permutation(char* pStr, char* pBegin)
{if(pStr==NULL || pBegin==NULL)return ;if(*pBegin == '\0'){printf("%s\n",pStr);//%s 输出整个字符串}else{for(char* pCh=pBegin; *pCh!='\0' ; ++pCh){char temp=*pCh;//交换到第一位置*pCh=*pBegin;*pBegin=temp;Permutation(pStr,pBegin+1);temp=*pCh;    //交换回来使得下次循环位置不变*pCh=*pBegin;*pBegin=temp;}}
}
void Permutation(char* pStr)
{Permutation(pStr, pStr);
} 

转载于:https://www.cnblogs.com/zjhnl/archive/2012/10/01/2709878.html

程序员面试题100题第28题——全排列相关推荐

  1. 程序员面试题100题第19题——反转链表

    1 .链表相邻元素翻转 2 .题目:输入一个链表的头结点,反转该链表,返回反转后链表的头结点: LNode* ReverseLinkList(LNode* head)//带头结点 {if(head = ...

  2. 程序员面试题100题第17题——字符串转化为整数

    题目:把输入的字符串转化为整数,如:"-456" 输出456."+456"输出456,"456"输出"456",如果是非 ...

  3. 程序员面试题100题第29题——调整数组顺序使奇数位于偶数前面

    思想完全是采用快速排序: bool isEven_(int n)//是否是偶数 {return (n&1)==0; } void swapOddEven(int arr[], int left ...

  4. 程序员面试题100题第03题——求子数组的最大和

    题目:输入一个整型数组,数组里有整数也有负数.数组中连续的一个或者多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值. 要求时间复杂度为O(n). 分析: 方法一: 当我们加上一个 ...

  5. 高薪程序员面试题精讲系列28之你熟悉哪些设计模式?

    一. 面试题及剖析 1. 今日面试题 你熟悉哪些设计模式? 说说设计模式中有哪些设计原则? 2. 题目剖析 我们知道Java是一个面向对象的编程语言,所以在面试时经常会被问到我们对面向对象的理解和掌握 ...

  6. 程序员面试题精选100题

    程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 比如将二元查找树   ...

  7. [程序员面试题精选100题]13.第一个只出现一次的字符

    [题目] 在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b. [分析] [代码] /********************************* * 日期:2013- ...

  8. 程序员面试题精选100题(51)-顺时针打印矩阵

    // 程序员面试题精选100题(51)-顺时针打印矩阵.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <iostre ...

  9. 程序员面试题精选100题:求从1到n的正数中1出现的次数

    // 程序员面试题精选100题(25):求从1到n的正数中1出现的次数 // 如 f(253) = (2!=0) * 100 + 2 * f(99) + (5!=0) * 10 + 5 * f(9) ...

最新文章

  1. 11项重大发布!百度大脑语言与知识技术峰会全程高能
  2. java导出excel数据量大_解决大批量Excel导出OOM问题
  3. 北大清华团队编写!200多个科学实验+视频,和爸爸一起在家做
  4. java禁止修改map_Java中实现不可变Map
  5. spring elasticsearch 按条件删除_实战:项目数据源转为Elasticsearch
  6. 您的计算机无法访问dota2服务器,一招解决DOTA2国服客户端无法启动问题
  7. 无80端口情况下使用 CertBot 申请SSL证书 并实现自动续期
  8. 去《挪威的森林》之后
  9. 计算机顶会英文论文查找
  10. 2)美国佬与才女薛涛的共同点
  11. 搜索:Flood Fill
  12. 抛弃Eclipse!
  13. fastadmin 数据导出,设置excel行高和限制图片大小
  14. 软件测试-测试历史/职业发展
  15. 学校计算机大赛的工作总结,工作总结之中国大学生计算机设计大赛参赛经验与总结...
  16. U3D的坑坑洼洼(1)
  17. 香港《财资》2018年金融科技奖 金融壹账通、花旗银行、招商银行等登榜
  18. 基于CentOS7的Matomo网站统计分析工具
  19. 对浙江软件市场前景的看法
  20. 【数学建模】线性代数模型(上)

热门文章

  1. 【CSS】当图片加载缓慢时,图片如何自适应高度
  2. LintCode 字符串查找
  3. jquery+ajax 实现text框模糊搜索并可利用listbox实时显示模糊搜索列表结果
  4. codeforces 297 E. Anya and Cubes
  5. 【转载】dotnet 线程同步
  6. 利用CRT库函数检查内存泄漏
  7. JS 取得当前时间日期
  8. Enterprise Library: Logging and Instrumentation Application Block概述
  9. 6个特征,判断你的领导值不值得追随
  10. TensorFlow和Keras入门必读教程