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();
        }
    }
};
相关推荐
立志成为大牛的小牛9 分钟前
数据结构——五十九、冒泡排序(王道408)
数据结构·学习·程序人生·考研·算法
s090713612 分钟前
下视多波束声呐进行测绘作业注意事项
算法·海洋测绘·下视多波束
wangjialelele20 分钟前
git工作原理、个人使用到多人协作开发与git FLOW模型
c语言·c++·git·团队开发·个人开发
papership27 分钟前
【入门级-数据结构-3、特殊树:完全二叉树的定义与基本性质】
数据结构·算法
iCxhust28 分钟前
__acrtused 是什么
c语言·c++·单片机·嵌入式硬件·微机原理
中國龍在廣州30 分钟前
AI顶会ICML允许AI参与审稿
人工智能·深度学习·算法·机器学习·chatgpt
立志成为大牛的小牛30 分钟前
数据结构——六十、快速排序(王道408)
数据结构·程序人生·考研·算法·排序算法
Dev7z31 分钟前
基于MATLAB的GA–PSO混合算法无线传感器网络节点部署优化研究
网络·算法·matlab
koo36434 分钟前
12.14周报
人工智能·算法