首页 > 其他分享 >全排列去重

全排列去重

时间:2023-05-20 15:00:25浏览次数:65  
标签:排列 cur nums vector result Visited

全排列去重的前提要求是目标集合必须是经过排序的。

在目标集合排序的前提下,第i位变换数字前后,如果是相同的数字,就会产生重复的排列。

注意:第i位变换的意思是i位本身的变换,而不是i与i-1的比较。

题目链接

代码如下:

void dfs(const vector<int>& nums, int pos, vector<vector<int>>& result, vector<int>& cur) {
    if (pos == nums.size()) {
        result.push_back(cur);
        return;
    }

    for (int i = 0; i < nums.size(); ++i) {
        // 控制i位 and 全排列去重
        if (Visited[i] || (i > 0 && nums[i] == nums[i - 1] && !Visited[i - 1])) {
            continue;
        }
        Visited[i] = true;
        cur.push_back(nums[i]);
        dfs(nums, pos + 1, result, cur);
        cur.pop_back();
        Visited[i] = false;
    }
}

vector<vector<int>> permuteUnique(vector<int>& nums) {
    vector<vector<int>> result;
    vector<int> cur;
    // 全排列去重的关键是排序过的集合
    sort(nums.begin(), nums.end());
    dfs(nums, 0, result, cur);
    return result;
}

标签:排列,cur,nums,vector,result,Visited
From: https://www.cnblogs.com/linukey/p/17417241.html

相关文章

  • 2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数
    2023-05-16:给你一个严格升序排列的正整数数组arr和一个整数k。请你找到这个数组里第k个缺失的正整数。输入:arr=[2,3,4,7,11],k=5。输出:9。答案2023-05-16:大体步骤如下:1.初始化左指针l为0,右指针r为数组长度减一,定义中间指针m和find(找到第k个正整数前的下标位置),......
  • sql---排列函数
    rank()&&dense_rank()1.rank()排名按照1,2,2,4,5,6selectscore,rank()over(orderbyS.scoredesc)as"rank"fromScoresS2.dense_rank()排名按照1,2,2,3,4,5selectscore,dense_rank()over(orderbyS.scoredesc)as"rank"fromScores......
  • 全排列
    字典序(非指针):#include<stdio.h>#include<string.h>#defineN100chara[N];voidswap(inti,intj){//交换 charch;ch=a[i];a[i]=a[j];a[j]=ch;}voidreverse(intstart,intend){//逆置 while(start<end){ swap(start,end);start++;......
  • P4163 [SCOI2007]排列
    Problem给一个数字串\(s\)和正整数\(d\),统计\(s\)有多少种不同的排列能被\(d\)整除(可以有前导\(0\))。多组数据。\(\left\verts\right\vert\le10,1\led\le1000,1\let\le15\)Input第一行一个整数\(t\),表示数据组数。接下来\(t\)行,每行一个数字串\(s\)......
  • shell排列3个整数
    用户输入3个整数,脚本根据数字大小依次升序输出3个数字#!/bin/bashecho"Pleaseenterthreeintegers:"read-rnum1num2num3echo"Sortedintegersinascendingorder:"echo"$num1$num2$num3"|tr'''\n'|sort-n|tr'\......
  • CodeForces - 626B Cards (全排列&模拟)
    TimeLimit: 2000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-626BCardsSubmit StatusDescriptionCatherinehasadeckof ntakeanytwo(notnecessarilyadjacent)cardswithdifferentcolorsandexchangethemforanewcardof......
  • 排列组合的应用
    目录应用应用1:Leetcode.39题目分析代码实现方法一方法二应用2:Leetcode.40题目分析代码实现应用3:Leetcode.216题目分析代码实现方法一方法二应用4:Leetcode.78题目分析代码实现应用5:Leetcode.90题目分析代码实现应用6:Leetcode.77题目分析代码实现应用7:Leetcode.46题目分析代码实现应......
  • 【算法基础】DFS深度优先算法 —— AcWing 843. n-皇后问题 AcWing 842. 排列数字
    n-皇后问题是一个经典的dfs深度优先遍历的题目,在题解这一题之前,将由浅入深,先讲解一个n-皇后问题的母题。-------AcWing842.排列数字 [AcWing842].排列数字题目概述给定一个整数 n,将数字 1∼n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格......
  • 6 排列与组合:排序、排位、排
    计算排位数目如要算出n个独立对象的排名方式的确切数目,可按下式进行计算:n!=n×(n-1)x(n-2)x…×3×2×1圆形排位如果有个对象需要进行圆形排位,则可能的排位数目按下式进行计算:(n-1)!按类型排位练习:排列排列是指从一个较大(n个)对象群体中取出一定数目(r个)对象进行排......
  • 番外篇:分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码)
    今日鸡汤夕阳无限好,只是近黄昏。    大家好,我是Python进阶者。    是不是觉得很诧异?明明上周刚发布了这篇:分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码),今天又来一篇,名曰番外篇!其实今天是想给大家分享【......