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();
        }
    }
};
相关推荐
贾全17 分钟前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
GIS小天32 分钟前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票
oioihoii1 小时前
C++11 forward_list 从基础到精通:原理、实践与性能优化
c++·性能优化·list
满分观察网友z1 小时前
开发者的“右”眼:一个树问题如何拯救我的UI设计(199. 二叉树的右视图)
算法
m0_687399841 小时前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
森焱森2 小时前
无人机三轴稳定化控制(1)____飞机的稳定控制逻辑
c语言·单片机·算法·无人机
循环过三天2 小时前
3-1 PID算法改进(积分部分)
笔记·stm32·单片机·学习·算法·pid
Ronin3052 小时前
【C++】类型转换
开发语言·c++
闪电麦坤953 小时前
数据结构:二维数组(2D Arrays)
数据结构·算法
mrbone113 小时前
Git-git worktree的使用
开发语言·c++·git·cmake·worktree·gitab