美文网首页
输出数组的全排列

输出数组的全排列

作者: Keizo | 来源:发表于2017-08-26 22:32 被阅读0次

思想:

  • n 个元素数组全排列 = 第 1 个前缀 + 后 n - 1 个元素全排列
  • 输出第 k 个元素之后的全排列:
    • 首先输出以 k 为前缀, 后 n - k 个元素的全排列
    • 然后依次将第 k 个元素与其后的元素互换,再进行后 n - k 个元素的全排列
    • 每一次互换 -> 排列之后,要互换恢复数组,以便于 k 与其后其他元素互换
  • 用递归实现,递归到最后一个数时候输出整个数组
#include <iostream>
using namespace std;

void perm(int list[], int k, int m)
{
    if (k == m) //递归到最后一个数,输出list
    {
        for (int i = 0; i < m; i++) {
            cout<<list[i]<<" ";
        }
        cout<<endl;
        return;
    }
    for (int i = k; i < m; i++) //第一次自己和自己换
    {
        swap(list[k], list[i]);
        perm(list, k + 1, m);
        swap(list[k], list[i]); //还原数组
    }
}

int main()
{
    int list[] = {1,2,3,4,5,6} ;
    perm(list, 0, sizeof(list) / sizeof(int));
    return 0;
}

相关文章

  • 输出数组的全排列

    思想: n 个元素数组全排列 = 第 1 个前缀 + 后 n - 1 个元素全排列 输出第 k 个元素之后的全排列...

  • 数组全排列

    递归实现 库函数实现 获取所有元素的全排列:itertools.permutation(lst, n) ——n:...

  • 全排列

    题目:给出一个数组,输出全部元素所有的排列结果 一、递归方法 数学思想:全排列个数为n的阶乘,数学记为n!即 n*...

  • 子集、全排列、第k个排列

    子集输出 全排列输出 存在重复数字的全排列 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大...

  • 输出全排列 (20 分)

    输出全排列 (20 分) 请编写程序输出前n个正整数的全排列(3<=n<=7),按字典序输出。 输入格式:一行输入...

  • 46. Permutations

    算法 1: 递归数组 的全排列,等价于全排列与可能的取值组合得到。 算法 2: 计算一个排列 按字典升序排列的紧...

  • 数组全排列问题

    最近看到剑指offer上一道数组全排列的题目,看似很简单,仔细分析一下,还是有点难以理解,特此在这拆解下,希望能够...

  • 递归——数组全排列

    方法一 深度 方法二 字典序递归

  • 序列判断

    给你一个整数组成的列表L,按照下列条件输出:若L是升序排列的,则输出"UP";若L是降序排列的,则输出"DOWN"...

  • leetcode 46. 全排列 javascript

    给定数组[1,2,3,4]策略是把所有元素分别提到最前面,进行剩下的数组的全排列1 + [2,3,4] 的全排列2...

网友评论

      本文标题:输出数组的全排列

      本文链接:https://www.haomeiwen.com/subject/qvivdxtx.html