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 <= nums[i] <= 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();
            }
        }
    }

};
相关推荐
wuminyu7 小时前
专家视角看Java多态性的底层基石vtable(虚函数表)构建过程解析
java·linux·c语言·jvm·c++
charlie1145141917 小时前
现代Qt开发教程(新手篇)1.10——进程
开发语言·c++·qt·学习
生物信息与育种7 小时前
全基因组重测序及群体遗传与进化分析技术服务指南
人工智能·深度学习·算法·数据分析·r语言
AI人工智能+电脑小能手7 小时前
【大白话说Java面试题】【Java基础篇】第23题:ConcurrentHashMap的底层原理是什么
java·开发语言·算法·哈希算法·散列表·hash
葳_人生_蕤7 小时前
hot100——回溯和DFS、BFS
算法·深度优先
Eloudy7 小时前
Steane码的稳定子的生成元集计算过程
算法
MegaDataFlowers7 小时前
快速算法验证流水线
算法
Aaron15887 小时前
27DR/47DR/67DR技术对比及应用分析
人工智能·算法·fpga开发·硬件架构·硬件工程·信息与通信·基带工程
alphaTao7 小时前
LeetCode 每日一题 2026/4/27-2026/5/3
算法·leetcode
wj3055853787 小时前
CMake 项目切换 Ninja 构建问题排查记录
c++