(六)全排列permutation

参考:

算法思路:

(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);

(2)出口:如果只有一个元素的全排列,则说明已经排完,则输出数组;

(3)不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组;

使用STL的std::next_permutation函数

void PermutationTest()
{
    string s = "abc";
    cout << s << endl;
    while (std::next_permutation(s.begin(), s.end())){
        cout << s << endl;
    }
}

原文地址:https://www.cnblogs.com/walkinginthesun/p/9850875.html

时间: 2024-08-25 00:24:05

(六)全排列permutation的相关文章

[LeetCode] “全排列”问题系列(二) - 基于全排列本身的问题,例题: Next Permutation , Permutation Sequence

一.开篇 既上一篇<交换法生成全排列及其应用> 后,这里讲的是基于全排列 (Permutation)本身的一些问题,包括:求下一个全排列(Next Permutation):求指定位置的全排列(Permutation Sequence):给出一个全排列,求其所在位置. 二.例题 1. 求下一个全排列,Next permuation Implement next permutation, which rearranges numbers into the lexicographically ne

【LeetCode】Permutation全排列

1. Next Permutation 实现C++的std::next_permutation函数,重新排列范围内的元素,返回按照 字典序 排列的下一个值较大的组合.若其已经是最大排列,则返回最小排列,即按升序重新排列元素.不能分配额外的内存空间. void nextPermutation(vector<int>& nums) { next_permutation(nums.begin(), nums.end()); } 全排列 Permutation 问题已经被古人研究透了,参见 W

全排列总结

接触全排列已经好长时间了,一直没有抽空总结一下全排列的相关问题,下面来说一下! 排列 一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement).特别地,当m=n时,这个排列被称作全排列(Permutation). 排列数公式: 特别,当n==m时为全排列的公式! 下一个全排列算法 lintcode链接:http://www.lintcode.com/zh-cn/problem/next-permutation/ 样例

数组的全排列

1.问题背景 学过数学的人都知道,全排列的意思是什么.现在如何用计算机的编程语言实现数组的全排列呢? 数组的全排列可用于求解八皇后问题,具体参见:全排列解决八皇后问题.与此同时,全排列经常会出现在笔试或者面试,如求字符串的全排列.之所以那它作为考题,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平.所以,掌握它很重要. 2.全排列的递归实现 2.1求解思路 全排列表示把集合中元素的所有按照一定的顺序排列起来,使用P(n, n) = n!表示n个元素全排列的个数

数据结构基础(3) --Permutation &amp; 插入排序

Permutation(排列组合) 排列问题: 设R = {r1, r2, ... , rn}是要进行排列的n个元素, Ri = R-{ri}; 集合X中元素的全排列记为Permutation(X), (ri)Permutation(X)表示在全排列Permutation(X)的每一个排列前加上前缀ri得到的排列. R的全排列可归纳定义如下: 当n=1时,Permutation(R)={r},r是集合R中唯一的元素: 当n>1时,Permutation(R)由(r1)Permutation(R1

c++ 全排列问题

题目描述 排列,一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement).特别地,当m=n时,这个排列被称作全排列(Permutation). 现给一个正整数( 1 < = n < = 8 ),输出所有全排列. 例如n=3,输出所有组合,并且按字典序输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格) 输入 输入一个整数n 输

9.13模拟赛

全排列 (permutation.cpp/c/pas)Description从 n 个不同元素中任取 m(m≤n)个元素,按照一定的顺序排列起来,叫做从 n个不同元素中取出 m 个元素的一个排列.当 m=n 时所有的排列情况叫全排列.你觉得 xxy 会问你全排列的个数吗?Xxy:这个问题能淹死你,我才不问呢.我要问的是求 n 的全排列中,先递增后递减.先递减后递增的全排列的个数.由于答案可能很大,对 p 取余Input输入包含多组测试数据每组测试数据一行两个整数 n,pOutput对于每组测试数

9.13——模拟赛

T1 全排列 (permutation.cpp/c/pas)Description从 n 个不同元素中任取 m(m≤n)个元素,按照一定的顺序排列起来,叫做从 n个不同元素中取出 m 个元素的一个排列.当 m=n 时所有的排列情况叫全排列.你觉得 xxy 会问你全排列的个数吗?Xxy:这个问题能淹死你,我才不问呢.我要问的是求 n 的全排列中,先递增后递减.先递减后递增的全排列的个数.由于答案可能很大,对 p 取余Input输入包含多组测试数据每组测试数据一行两个整数 n,pOutput对于每组

c++ 排列问题

题目描述 排列,一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement).特别地,当m=n时,这个排列被称作全排列(Permutation). 如n=3,m=2的排列有: 1 2 1 3 2 1 2 3 3 1 3 2 输入 输入两个整数n和m(1<=n<=10,1<=m<=n). 输出 输出所有的排列,每个排列占一行,同一个排列中,两个数之间用一个空格隔开. 样例输入 3 2 样例输出 1 2 1 3