美文网首页
46. 全排列

46. 全排列

作者: geaus | 来源:发表于2022-11-24 20:32 被阅读0次

方法1

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> ret;
        int n = nums.size();
        helper(ret, nums, 0, n);
        return ret;
    }

    void helper(vector<vector<int>>& ret, vector<int>& nums, int i, int n){
        if(i==n){
            ret.push_back(nums);
            return;
        }

        for(int j=i; j<n; j++){
            swap(nums, i, j);
            helper(ret, nums, i+1, n);
            swap(nums, i, j);
        }
    }

    void swap(vector<int>& nums, int i, int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
};

方法2

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
public:
    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++){
            if(used[i]==true)
                continue;

            used[i] = true;
            path.push_back(nums[i]);
            backtracking(nums, used);
            used[i] = false;
            path.pop_back();
        }
    }

    vector<vector<int>> permute(vector<int>& nums) {
        result.clear();
        path.clear();
        vector<bool> used(nums.size(), false);
        backtracking(nums, used);
        return result;
    }
};

相关文章

网友评论

      本文标题:46. 全排列

      本文链接:https://www.haomeiwen.com/subject/jbttfdtx.html