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();
        }
    }
};
相关推荐
一只懒洋洋21 分钟前
K-meas 聚类、KNN算法、决策树、随机森林
算法·决策树·聚类
晚云与城31 分钟前
今日分享:C++ Stack和queue(栈与队列)
开发语言·c++
bikong71 小时前
一种高效绘制余晖波形的方法Qt/C++
数据库·c++·qt
方案开发PCBA抄板芯片解密1 小时前
什么是算法:高效解决问题的逻辑框架
算法
深耕AI2 小时前
【MFC文档与视图结构:数据“仓库”与“橱窗”的梦幻联动 + 初始化“黑箱”大揭秘!】
c++·mfc
songx_992 小时前
leetcode9(跳跃游戏)
数据结构·算法·游戏
励志不掉头发的内向程序员2 小时前
STL库——二叉搜索树
开发语言·c++·学习
小白狮ww2 小时前
RStudio 教程:以抑郁量表测评数据分析为例
人工智能·算法·机器学习
AAA修煤气灶刘哥2 小时前
接口又被冲崩了?Sentinel 这 4 种限流算法,帮你守住后端『流量安全阀』
后端·算法·spring cloud
tan180°3 小时前
Boost搜索引擎 查找并去重(3)
linux·c++·后端·搜索引擎