leetcode46.全排列

利用回溯法解决全排列问题。

  1. 题目:
    给定一个没有重复数字的序列,返回其所有可能的全排列。
  2. 示例:
    输入: [1,2,3]
    输出:
    [
    [1,2,3],
    [1,3,2],
    [2,1,3],
    [2,3,1],
    [3,1,2],
    [3,2,1]
    ]
  3. 思路:
    在这里插入图片描述
    在这里插入图片描述
  4. 代码:
class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        res.clear();
        if(nums.size()==0) return res;
        used=vector<bool>(nums.size(),false);
        vector<int> p;
        generatePermutation(nums,0,p);
        return res;
    }
private:
    vector<vector<int> > res;
    vector<bool> used;
    //p中保存了一个有index个元素的排列
    //向这个排列的末尾添加第index+1个元素,获得一个有index+1个元素的排列
    void generatePermutation(const vector<int>&nums,int index,vector<int>& p){
        if(index==nums.size()){
            res.push_back(p);
            return;
        }
        for(int i=0;i<nums.size();i++){
            if(!used[i]){
                //将nums[i]加入到p中
                p.push_back(nums[i]);
                used[i]=true;
                //递归
                generatePermutation(nums,index+1,p);
                //状态回溯
                p.pop_back();
                used[i]=false;
            }
        }
        return;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_14962179/article/details/86477032