leetcode-没有重复项的全排列-97

题目要求

思路

1.递归,如果num和n的元素个数一样就可以插入res中了,这个作为递归的结束条件

2.因为这个题是属于排列,并非组合,两者的区别是排列需要把之前插入的元素在回退会去,而组合不需要,因此会存在一个pop_back()的操作。

3.特殊情况的处理,如果这个元素已经在n中插入过,就需要跳过该元素,对应的是题目中的不能重复,因为这里需要跳过的是最外面的for循环,因此,只能通过flag建立标记,而无法通过continue直接跳过,continue只能跳过用于做判断的内循环。
代码实现

cpp 复制代码
class Solution {
public:
    vector<vector<int>> res;
    vector<vector<int> > permute(vector<int>& num) {
        vector<int> n;
        per(num, n);
        return res;
    }

    void per(vector<int>& num, vector<int>& n)
    {
        if(num.size() == n.size())
        {
            res.push_back(n);
            return;
        }

        for(int i = 0; i < num.size(); i++)
        {
            bool flag = false;
            for(int j = 0; j < n.size(); j++)
            {
                if(num[i] == n[j])
                    flag = true;
            }
            if(flag)
                continue;
            n.push_back(num[i]);
            per(num, n);
            n.pop_back();
        }
    }
};
相关推荐
柏木乃一2 分钟前
进程间通信IPC(1)IPC概述,匿名管道,进程池
linux·服务器·c++·进程间通信·ipc·匿名管道·进程池
好学且牛逼的马7 分钟前
【Hot100|17-LeetCode 73. 矩阵置零 - 完整解法详解】
算法·leetcode·职场和发展
蒹葭玉树12 分钟前
【C++上岸】C++常见面试题目--操作系统篇(第二十七期)
java·c++·面试
进击的小头12 分钟前
IIR滤波器核心原理深化:从差分方程到工业级实现
c语言·python·算法
GHL28427109013 分钟前
TeamTalk-login_server学习
运维·服务器·c++·学习
Queenie_Charlie17 分钟前
一个奇数次
c++·位运算
AllData公司负责人22 分钟前
【亲测好用】数仓建模平台能力演示
大数据·数据库·算法
爱学习的阿磊24 分钟前
自定义操作符重载指南
开发语言·c++·算法
zhuanggoahead41 分钟前
拓扑排序(Kahn算法)
网络·数据结构·c++·算法·排序算法
Studying 开龙wu1 小时前
争对C++开发VS2022安装——Microsoft Visual Studio2022从下载到安装步骤教程(超详细)
c++·microsoft·visual studio