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();
            }
        }
    }

};
相关推荐
小欣加油3 分钟前
Leetcode2058 找出临界点之间的最小和最大距离
数据结构·c++·算法·leetcode·职场和发展
华华哥202213 分钟前
《模型不玄学》第25章 双头模型:共享底座 + 两个分支
算法
王老师青少年编程20 分钟前
2026年山东省小学组【信息学体验营】复赛真题及题解T2:小兔子爬楼梯
c++·真题·山东省·csp·信奥赛·复赛·信息学体验营
Yfhonier23 分钟前
6441. 特别的除法
c++·算法
华华哥202227 分钟前
《模型不玄学》第5章 看懂你的数据:先认字段,再过门禁
算法
国科安芯30 分钟前
低轨卫星姿轨控系统中抗辐射MCU的选型依据与工程实践
单片机·嵌入式硬件·算法·架构·系统安全·低轨卫星·抗辐射
高亦真35 分钟前
今天是学习嵌入式的第33天
linux·学习·算法
OPEN-F36 分钟前
C++17新特性精讲:结构化绑定、if constexpr与实用类型
开发语言·c++
CoderYanger37 分钟前
A.每日一题:3345. 最小可整除数位乘积 I
java·数据结构·程序人生·算法·leetcode·面试·学习方法
带多刺的玫瑰38 分钟前
Leecode#16刷题之最接近的三数之和
数据结构·算法