LeetCode热题100 全排列

题目描述

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入 :nums = 1,2,3
输出 :\[1,2,3,1,3,2,2,1,3,2,3,1,3,1,2,3,2,1]

示例 2:

输入 :nums = 0,1
输出 :\[0,1,1,0]

示例 3:

输入 :nums = 1
输出 :\[1]

提示:

1 <= nums.length <= 6

-10 <= numsi <= 10

nums 中的所有整数 互不相同

思路

dfs模板,详细见代码。

代码

cpp 复制代码
class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        // 获取长度
        int n = nums.size();
        // 存储全部答案
        vector<vector<int>>ans;
        // 判断某个数字是否已经在当前组的答案中
        vector<bool>st(n, false);
        // 每组的答案
        vector<int>res;

        for(int i = 0; i < n; ++i)
        {
            if(!st[i])
            {
                st[i] = true;
                res.push_back(nums[i]);
                dfs(n, nums, st, res, ans);
                st[i] = false;
                res.pop_back();
            }
        }
        return ans;
    }

    void dfs(int n, vector<int> &nums, vector<bool> &st, vector<int> &res, vector<vector<int>> &ans)
    {
        if(res.size() == n)
        {
            ans.push_back(res);
            return;
        }

        for(int i = 0; i < n; ++i)
        {
            if(!st[i])
            {
                st[i] = true;
                res.push_back(nums[i]);
                dfs(n, nums, st, res, ans);
                st[i] = false;
                res.pop_back();
            }
        }
    }

};
相关推荐
微笑星河q31 分钟前
C++类和对象(下)初始化列表、类型转换、static、友元、内部类、匿名对象
开发语言·c++
yi0111 小时前
DAY28: LeetCode 111. 二叉树的最小深度
人工智能·笔记·python·算法·leetcode·二叉树·递归
|_⊙1 小时前
C++ 类和对象零散知识点
开发语言·c++
wuyk5551 小时前
27.LeetCode 2265. 统计值等于子树平均值的节点数 —— 后序遍历实战
stm32·单片机·嵌入式硬件·算法
xiangyun611 小时前
C++ list 模拟实现(二):const迭代器与反向迭代器,模板的黑魔法
开发语言·数据库·c++·算法·stl·list
xxwl5851 小时前
三、区域赛算法模版第三章---字符串相关算法
笔记·学习·算法
信奥卷王1 小时前
[GESP202509 六级] 划分字符串(含视频)
数据结构·算法
酒醉的胡铁2 小时前
相似度搜索的常见算法
算法·ai
局部有解2 小时前
Leetcode Hot100 - 最长连续序列
算法·leetcode·职场和发展
m0_752035632 小时前
Redis 数据结构总结
数据结构·数据库·redis