46. Permutations和47. Permutations II

目录

46. Permutations

方法一、使用used数组回溯

方法二、不使用used数组回溯

47. Permutations II

回溯法


46. Permutations

46. Permutations和47. Permutations II_第1张图片

方法一、使用used数组回溯

class Solution {
    vector> res;
    vector apermutation;
public:
    vector> permute(vector& nums) {
        vector used(nums.size(),false);
        backtracking(nums,used);
        return res;
    }
    void backtracking(vector& nums,vector &used){
        if(apermutation.size() == nums.size())
        {
            res.push_back(apermutation);
            return;
        }

        for(int i = 0;i < nums.size();i++){
            if(used[i])
                continue;
            apermutation.push_back(nums[i]);
            used[i] = true;
            backtracking(nums,used);
            apermutation.pop_back();
            used[i] = false;
        }
    }
};

方法二、不使用used数组回溯

class Solution {
    vector> res;
public:
    vector> permute(vector& nums) {
        backtracking(nums,0);
        return res;
    }
    void backtracking(vector& nums,int start){
        if(start == nums.size())
        {
            res.push_back(nums);
            return;
        }

        for(int i = start;i < nums.size();i++){
            swap(nums[i],nums[start]);
            backtracking(nums,start+1);
            swap(nums[i],nums[start]);
        }
    }
};

47. Permutations II

46. Permutations和47. Permutations II_第2张图片

回溯法

class Solution {
    vector> res;
    vector apermutaion;
public:
    vector> permuteUnique(vector& nums) {
        sort(nums.begin(),nums.end());
        vector used(nums.size(),false);
        backtracking(nums,used);
        return res;
    }

    void backtracking(vector& nums,vector &used){
        if(apermutaion.size() == nums.size()){
            res.push_back(apermutaion);
            return;
        }

        for(int i = 0;i 0 && nums[i]==nums[i-1] && used[i-1]==false)
                continue;
            apermutaion.push_back(nums[i]);
            used[i] = true;
            backtracking(nums,used);
            apermutaion.pop_back();
            used[i] = false;
        }
    }
};

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