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 小时前
分布式缓存-GO(分布式算法之一致性哈希、缓存对外服务化)
开发语言·经验分享·分布式·后端·算法·缓存·golang
旖旎夜光3 小时前
多态(11)(下)
c++·学习
yongui478343 小时前
MATLAB的指纹识别系统实现
算法
高山上有一只小老虎3 小时前
翻之矩阵中的行
java·算法
yangpipi-3 小时前
《C++并发编程实战》 第4章 并发操作的同步
开发语言·c++
jghhh013 小时前
RINEX文件进行卫星导航解算
算法
Chance_to_win3 小时前
C++基础知识
c++
爱思德学术3 小时前
中国计算机学会(CCF)推荐学术会议-A(计算机科学理论):LICS 2026
算法·计算机理论·计算机逻辑
CVHub4 小时前
多模态图文训推一体化平台 X-AnyLabeling 3.0 版本正式发布!首次支持远程模型推理服务,并新增 Qwen3-VL 等多款主流模型及诸多功能特性,等
算法
有趣的我4 小时前
C++ 多态介绍
开发语言·c++