DAY31 回溯算法 排列问题

491. 非递减子序列 - 力扣(LeetCode)

 这道题限制了nums的取值范围,所以可以使用数组来去重,如果范围过大要使用哈希表。

class Solution {
private:
    vector>result;
    vectorpath;
    void backTracking(vector& nums,int startIndex){
        if(path.size()>1){
            result.push_back(path);
        }
        int used[201]={0};
        for(int i=startIndex;i> findSubsequences(vector& nums) {
        result.clear();
        path.clear();
        backTracking(nums,0);
        return result;
    }
};

 46. 全排列 - 力扣(LeetCode)

class Solution {
private:
    vector>result;
    vectorpath;
    void backTracking(vector& nums,vectorused){
        if(path.size()==nums.size()){
            result.push_back(path);
            return;
        }
        for(int i=0;i> permute(vector& nums) {
        result.clear();
        path.clear();
        vectorused(nums.size(),false);
        backTracking(nums,used);
        return result;
    }
};

47. 全排列 II - 力扣(LeetCode) 

class Solution {
private:
    vector>result;
    vectorpath;
    void backTracking(vector& nums,vector& used){
        if(path.size()==nums.size()){
            result.push_back(path);
            return;
        }
        for(int i=0;i0&&nums[i]==nums[i-1]&&used[i-1]==false){
                continue;
            }
            if(used[i]==false){
                used[i]=true;
                path.push_back(nums[i]);
                backTracking(nums,used);
                path.pop_back();
                used[i]=false;
            }
        }
    }
public:
    vector> permuteUnique(vector& nums) {
        result.clear();
        path.clear();
        sort(nums.begin(),nums.end());
        vectorused(nums.size(),false);
        backTracking(nums,used);
        return result;
    }
};

332. 重新安排行程 - 力扣(LeetCode)

37. 解数独 - 力扣(LeetCode)
 

51. N 皇后 - 力扣(LeetCode)

 还有三道hard,二刷再看。

你可能感兴趣的:(leetcode,数据结构,算法,c++)