c_cpp 具有重复的排列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 具有重复的排列相关的知识,希望对你有一定的参考价值。

检测后面的元素,如果相同没有必要swap
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;
int num = 0;

int ok(int list[], int k, int i)
{
    if (i > k) 
    {
        for (int t = k; t < i; t++)
        {
            if (list[t] == list[i]) 
            {
                return 0;
            }
        }
    }
    return 1;
}

void perm(int list[], int k, int m)
{
    if (k == m)
    {
        for (int i = 0; i <= m; i++)
            printf("%d", list[i]);
        cout << endl;
        num ++;
    }
    else
    {
        for (int i = k; i <= m; i++)
        {
            if (ok(list, k, i)) 
            {
                swap(list[k], list[i]);
                perm(list, k+1, m);
                swap(list[k], list[i]);
            }
        }
    }

}

int main()
{
    int list[] = {1, 2, 2, 3};
    //int list[] = {1};
    int len = sizeof(list) / sizeof(list[0]);
    perm(list, 0, len-1);
    printf("num: %d\n", num);
    return 0;
}

以上是关于c_cpp 具有重复的排列的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 给定可能包含重复项的数字集合,返回所有可能的唯一排列。例如,[1,1,2]有以下内容

c_cpp 查找=重复xor具有相同的数字不会更改输出字符。

生成具有重复元素的列表排列

c_cpp 给定已排序的链接列表,删除所有具有重复数字的节点,只留下原始列表中的不同数字。

如何生成排列而不生成重复结果但具有固定数量的字符Python [重复]

使用javascript重新排列具有新顺序的数组[重复]