• 1.STL—《algorithm》中的两个函数next_permutation和prev_permutation

    • next_permutation:对于当前的排列,如果在字典序中还存在下一个排列,返回真,并且将下一个排列赋予当前排列,如果不存在,就把当前排列进行递增排序。

    • prev_permutation对于当前的排列,如果在字典序中还存在前一个排列,返回真,并且将前一个排列赋予当前排列,如果不存在,就把当前排列进行递减排序。

    • 那么利用next_permutation可以很轻松的实现全排列。
    • 代码:
      
      #include <iostream>#include<algorithm>using namespace std;int main(int argc, char *argv[])
      {string str="2132";sort(str.begin(),str.end());do{cout<<str<<endl;}while(next_permutation(str.begin(),str.end()));return 0;
      }
      //输出为:
      1223
      1232
      1322
      2123
      2132
      2213
      2231
      2312
      2321
      3122
      3212
      3221
  • 2.字符串的字典顺序的全排列

    • 使用去重递归的方法
    • 这里不使用stl的方法,自己使用递归的方法实现函数
    • 考虑我们在求1234的全排列的做法,其做法如下图:也是递归程序的执行过程

    class Solution {
    public:vector<string> Permutation(string str) {vector<string>res;if(str.size()==0)return res;Permutation(res,str,0);sort(res.begin(),res.end());return res;}void Permutation(vector<string>&res,string str,int begin){if(begin==str.size()-1)res.push_back(str);for(auto i=begin;i<str.size();i++){有重复字符时,跳过if(i!=begin&&str[i]==str[begin])continue;//当i==begin时,也要遍历其后面的所有字符;当i!=begin时,先交换,使第begin位取到不同的可能字符,再遍历后面的字符swap(str[i],str[begin]);Permutation(res,str,begin+1);//为了避免重复的情况,还需要将begin处的元素重新换回来swap(str[i],str[begin]);}}
    };

refer

[1] https://blog.csdn.net/summerxiachen/article/details/60579623

[2] https://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7

全排列---STL方法与递归方法相关推荐

  1. python全排列字典序输出 递归_全排列-字典序列、递归方法c语言实现

    当前位置:我的异常网» C语言 » 全排列-字典序列.递归方法c语言实现 全排列-字典序列.递归方法c语言实现 www.MyException.Cn  网友分享于:2014-04-20  浏览:4次 ...

  2. 运用全排列的方法解决八皇后问题

    运用全排列的方法解决八皇后问题,可以分为两部分:全排列和八皇后,下面我将分开说明两个步骤. 首先说明八皇后: 第一步:就是把皇后按照0到8编号,然后对八个皇后进行全排列,一共有40320种排列方式. ...

  3. python3数字全排列怎么搞_python3实现字符串的全排列的方法(无重复字符)

    最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论.线性代数.高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力.唉!不说 ...

  4. python3实现字符串的全排列的方法(无重复字符)

    抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 解决方案 目前有两种解决的方法 方法一: def str_ ...

  5. C++ 十大经典排序算法原理及模板之STL方法实现以及稳定性分析

    写在前面: 1.本文中默认排序为升序,降序的原理类似. 2.如果程序直接复制到vs出现无法识别标记的问题,解决方法在这:vs无法识别标记的解决方法 3.本文的算法都是自己用stl实现的,疏漏之处还请指 ...

  6. 用康托展开实现全排列(STL、itertools)

    康拓展开: $X=a_n*(n-1)!+a_{n-1}*(n-2)!+\ldots +a_2*1!+a_1*0!$ X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+ ...

  7. python递归全排列_python递归全排列实现方法

    本文实例为大家分享了python递归全排列的实现方法,供大家参考,具体内容如下 排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ ...

  8. python1到n的所有排列_非递归输出1-N的全排列的方法详解

    下面小编就为大家带来一篇非递归的输出1-N的全排列实例(推荐).小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 网易游戏笔试题算法题之一,可以用C++,Java,Pyth ...

  9. python全排列速度最快_python 写的两种打印全排列的方法速度对比

    方法一: max = 6 index = [0]*max from time import clock start=clock() while True: candi = range(0,max) f ...

最新文章

  1. nginx lua redis 访问频率限制(转)
  2. JavaScript碎片—函数闭包(模拟面向对象)
  3. 阿里云系列——7.阿里云IIS系列详解(过程+通用+最新)
  4. AngularJS学习---REST和自定义服务(REST and Custom Services) ngResource step 11
  5. 基于git的工作流程
  6. 克罗内克内积 Kronecker product
  7. m.2接口和nvme区别_M.2接口硬盘当真速度就快吗?这些不懂就别乱买!今天再说一遍...
  8. Android 系统性能优化(74)---如何减少lowmemory的发生几率
  9. 大数据_Flink_数据处理_流式数据源测试---Flink工作笔记0010
  10. JavaSE基础知识点思维导图
  11. MATLAB 字符串与矩阵的学习
  12. Ensembl数据库简介
  13. Android仿人人客户端(v5.7.1)——有关滑动式左侧菜单实现过程中网友的疑问解答
  14. 【第三方互联】微博2、创建新浪微博(sina)互联应用
  15. CSMA/CA精辟总结
  16. 【Vue】render函数使用和详解
  17. 代码编辑软件Sublime Text 4中文版安装使用教程
  18. Mac安装升级solc编译器
  19. 新浪微博开发之授权用户登录的实现
  20. 学校计算机ip设置路由器,如何设置计算机的固定IP地址和路由器?

热门文章

  1. 牛客网暑期ACM多校训练营(第五场): F. take(期望+线段树)
  2. bzoj 1414 bzoj 3705: [ZJOI2009]对称的正方形(二维Hash)
  3. bzoj 4002: [JLOI2015]有意义的字符串(特征根法+矩阵快速幂)
  4. bzoj 1689: [Usaco2005 Open] Muddy roads 泥泞的路(模拟)
  5. 置换群burnside引理(bzoj 1004: [HNOI2008]Cards)
  6. window下hadoop、hbase的安装和eclipse开发环境配置
  7. java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作
  8. 项目分析:大学生个人财务管理系统的设计与实现
  9. linux环境下snap安装vscode
  10. 面试题17: 打印从1到最大的n位数