力扣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;
    }
};
相关推荐
草莓熊Lotso13 分钟前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day10
c语言·开发语言·经验分享·算法·强化
张同学的IT技术日记1 小时前
详细实例说明+典型案例实现 对迭代法进行全面分析 | C++
算法
Coovally AI模型快速验证1 小时前
全景式综述|多模态目标跟踪全面解析:方法、数据、挑战与未来
人工智能·深度学习·算法·机器学习·计算机视觉·目标跟踪·无人机
草莓熊Lotso2 小时前
【C++】--函数参数传递:传值与传引用的深度解析
c语言·开发语言·c++·其他·算法
不知名。。。。。。。。2 小时前
算法 ----- 链式
算法
网易独家音乐人Mike Zhou2 小时前
【Python】圆柱体内部3D点云仿真及ply文件生成,圆形3D点云检测及拟合算法
stm32·单片机·mcu·物联网·算法·点云·iot
scx201310043 小时前
20250822 组题总结
c++·算法
智驱力人工智能3 小时前
智慧工厂烟雾检测:全场景覆盖与精准防控
人工智能·算法·安全·智慧城市·烟雾检测·明火检测·安全生产
浩少7025 小时前
LeetCode-17day:贪心算法
算法·leetcode·贪心算法
weixin_516875656 小时前
力扣 30 天 JavaScript 挑战 第37天 第九题笔记 知识点: 剩余参数,拓展运算符
javascript·笔记·leetcode