46.全排列

原题链接:46.全排列

思路:
主要是和组合的区别,排列是可以从头使用元素
但是依旧是不允许有重复元素使用,所以依旧是需要进行去重

全代码:

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>& nums,vector<bool>& used)
    {
        if(path.size() == nums.size())
        {//当全排列的序列大下坡等于数组大小  则终止
            result.push_back(path);
            return;
        }
        for(int i = 0; i < nums.size(); i++)
        {//因为是每次都要从头开始排,所以不需要startIndex
            if(used[i] == true) continue; //如果本层之前的元素使用过,则跳过循环
            used[i] = true;//记录该元素已被使用
            path.push_back(nums[i]);//将nums[i] push进path中
            backtracking(nums,used); //进入递归
             used[i] = false;   //回溯
            path.pop_back();    //回溯
           
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        vector<bool> used(nums.size(),false);
        backtracking(nums,used);
        return result;
    }
};

你可能感兴趣的:(回溯,递归)