字符串全排列是面试中常考的问题,一定要掌握

这题没写出来,思路就是把第一个字符和后面所有字符交换,然后递处理后面n-1个,最后需要在调用交换函数换回原始字符串

 1 #include<iostream>
 2 using namespace std;
 3 #include<assert.h>
 4
 5 void Permutation(char* pStr, char* pBegin)
 6 {
 7     assert(pStr && pBegin);
 8
 9     if(*pBegin == '\0')
10         printf("%s\n",pStr);
11     else
12     {
13         for(char* pCh = pBegin; *pCh != '\0'; pCh++)
14         {
15             swap(*pBegin,*pCh);
16             Permutation(pStr, pBegin+1);
17             swap(*pBegin,*pCh);
18         }
19     }
20 }
21
22 int main(void)
23 {
24     char str[] = "abc";
25     Permutation(str,str);
26     return 0;
27 }

http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7?tpId=13&tqId=11180&rp=2&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

牛客网上的输入可能有重复,需要做去重处理

class Solution {
public:vector<string> result;vector<string> Permutation(string str) { if(str.empty())return result;Permutation(str,0);return result;}void Permutation(string str,int i){if(i == str.length())result.push_back(str);else{for(int j = i;j < str.length();j++){sort(str.begin() + i,str.end());    //先对str按字典排序if(i != j && str[i] == str[j])    //方式aa这种输出两次continue;swap(str[i],str[j]);Permutation(str,i+1);swap(str[i],str[j]);     }}}
};

更多字符串排列问题参考:http://blog.csdn.net/hackbuteer1/article/details/7462447

总结全排列递归问题:

if和递归调用控制一个总体循环,for控制剩余循环

fun(数组,起始遍历位置)
{if (终止条件)操作;elsefor (遍历数组){swap();fun(); 递归调用swap();}
}

8皇后问题可参考全排列解法

转载于:https://www.cnblogs.com/raichen/p/5653153.html

面试题28:字符串全排列相关推荐

  1. 面试题28 字符串排列

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 结果请按字母顺 ...

  2. [剑指offer]面试题28:字符串的排列

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

  3. 剑指offer——面试题28:字符串的排列

    剑指offer--面试题28:字符串的排列 Solution1: 2018年9月2日重做 典型的DFS套路,LeetCode 46 && 47 [46]https://blog.csd ...

  4. 牛客网在线编程专题《剑指offer-面试题28》字符串的排列

    我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容,分享 ...

  5. java面试题28 牛客 下面有关java classloader说法错误的是?

    java面试题28 牛客 下面有关java classloader说法错误的是? A Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension Cl ...

  6. 【前端笔试】JavaScript实现字符串全排列

    我个人认为前端工程师笔试题中,算法题一般不难,也就这个难度,甚至比这还要简单.这是我在笔试过程中遇到的一个题~下面分享一下解题思路. 大体结构:定义一个方法,传入str变量,返回一个数组,包含所有排列 ...

  7. 剑指offer:面试题38. 字符串的排列

    题目:面试题38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" 输 ...

  8. 求字符串全排列的递归算法

    求字符串全排列的递归算法 void permutation(char * p_str, char * p_begin) { if(!p_str || !p_begin) { return; } if( ...

  9. 第十一届蓝桥杯python试题_Python描述 第十一届蓝桥杯省赛第一场 试题 I: 字符串编码...

    试题 I: 字符串编码 时间限制: 1.0s 内存限制: 512.0MB 本题总分 25 分 [问题描述] 小明发明了一种给由全大写字母组成的字符串编码的方法.对于每一个大 写字母 小明将它转换成它在 ...

最新文章

  1. android 对话框
  2. 物理与计算机信息工程学院,泉州师范学院物理与信息工程学院
  3. bootloader 简介
  4. 【C语言】利用递归解决猴子吃桃问题
  5. [译] 在Web API 2 中实现带JSON的Patch请求
  6. FreeRTOS的HOOK,以及(23)FreeRTOS 空闲任务分析
  7. sundancest201驱动_驱动支持列表
  8. Windows-Exploit-Suggester
  9. 实训一#1.7F1方程式冠军
  10. 股票投资(炒股)之入门基础知识
  11. 乐乎常用的html源码,LOFTER网页版登录入口
  12. 三菱PLC梯形图入门操作指令
  13. Node.js 中 __dirname 和 ./ 的区别
  14. Flume+Kafka双剑合璧玩转大数据平台日志采集
  15. 代码坏的味道07:依恋情结(Feature Envy)
  16. DebianLinux下如何安装软件(转)
  17. 使用Hogo+LoveIt主题搭建博客网站
  18. 隐身9年的俄罗斯APT组织XDSpy及其XDDown攻击链分析
  19. 渲染html失败,【报Bug】页面渲染失败,偶发性十次有一次
  20. 6月不良与垃圾信息举报:垃圾邮件7559件次 降84.2%

热门文章

  1. pwm控制舵机转动角度程序_舵机的内部结构及工作原理
  2. websocket server client 编写
  3. u-boot移植随笔:继续使用svn进行版本控制(合并分支实例)
  4. php怎样连接mysql_php怎么连接数据库
  5. 【kafka】Number of insync replicas for partition __transaction_state-4 is below required minimum
  6. 【Es】es 配置文件详解
  7. 【算法】LSM-tree 基本原理及应
  8. 【Kafka】Failed to send data to Kafka: Failed to allocate memory within the configured max blocking
  9. Spring Boot如何以优雅的姿势校验参数
  10. 一文详解 Dubbo 注册发现流程