LetCode 46. 全排列

static int x=[](){
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    return 0;
}();
class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;    
        resover(0, res, nums);
        return res;
    }
    
    
    void resover(int n, vector<vector<int>>& res, vector<int>& nums){
        //当尝试对不存在的数组元素进行递归时,标明所有数已经排列完成,输出。
        if (n == nums.size()){
            vector<int> tmp;
            for(int i = 0; i < nums.size(); i++)
                tmp.push_back(nums[i]);
            res.push_back(tmp);
            return;
        }
        //循环实现交换和之后的全排列  
        for (int i = n; i < nums.size(); i++){
            //i是从n开始 i=n;swap(n,i)相当于固定当前位置,在进行下一位的排列。
            swap(nums[n],nums[i]);
            resover(n + 1, res, nums);
            swap(nums[n], nums[i]);
        }
        return;
    }
};

猜你喜欢

转载自blog.csdn.net/wbb1997/article/details/80988406
今日推荐