leetcode-46. 全排列

 39题组合总数也可以用这种模式

 

 

class Solution {
public:
    vector<vector<int>> res;
    vector<vector<int>> permute(vector<int>& nums) {
        if(nums.size()==0)
            return res;
        vector<int> temp;
        vector<bool> used(nums.size(),false);
        order(nums,temp,used);
        return res;
        
    }
    void order(vector<int> nums,vector<int> temp,vector<bool> used){
        // 这题最关键的就是used数组,想了办法没想到怎么表示访问过的元素

        if(nums.size() == temp.size()){
            res.push_back(temp);
            return;
        }
        for(int i = 0; i < nums.size(); i++){
            if(used[i]==true)  // 如果这个元素被访问过,直接跳过
                continue;
            used[i] = true;  // 设置为true
            temp.push_back(nums[i]);  
            order(nums,temp,used);  //进行递归
            temp.pop_back();  // 回溯
            used[i] = false;  //回溯
        }
    }
};

 

posted @ 2021-07-16 17:20  三一一一317  阅读(27)  评论(0)    收藏  举报