力扣46:全排列

力扣46:全排列

题目

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

思路

看到所有可能首先想到的就是回溯。

回溯的结束条件也很好写,用数组的长度来判断即可。这道题的难点主要是如何进行判断这个位置我们已经使用过了,和我们之前的回溯不同之前的回溯可能每个位置是一个字符串或者数组所以我们可以使用下标来控制,这道题我们每个位置都只是一个数字所以我们得另想办法。其实也很简单我们用一个存储着bool类型的数组不就可以了如果这个位置已经插入了我们就把对应下标设为true如果没插入就是flase。思路有了代码就很简单了。

代码

cpp 复制代码
class Solution {
public:
    void BackCall(vector<vector<int>>& res,vector<int>& nums,vector<bool>& v,vector<int> tmp)
    {
        if(tmp.size() == nums.size())
        {
            res.push_back(tmp);
            return;
        }
        for(int i = 0; i <nums.size();i++)
        {
            if(v[i] == true)
            {
                continue;
            }
            v[i] = true;
            tmp.push_back(nums[i]);
            BackCall(res,nums,v,tmp);
            tmp.pop_back();
            v[i] = false;
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;
        vector<int> tmp;
        //使用索引和bool类型来判断此位置是否已经使用过了
        vector<bool> v(nums.size(),false);
        //回溯
        BackCall(res,nums,v,tmp);
        return res;
    }
};
相关推荐
小O的算法实验室1 天前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生1 天前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿1 天前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz1 天前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能1 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****1 天前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能2 天前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能2 天前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo2 天前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ02 天前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法