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

};
相关推荐
复杂网络6 小时前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
apocelipes20 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron1 天前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩1 天前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹1 天前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术1 天前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望1 天前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰1 天前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法
地平线开发者2 天前
J6B vio scenario sample
算法