代码随想录算法训练营第二十九天|491.递增子序列、46.全排列、47.全排列 II

题目:491.递增子序列

文章链接:代码随想录

视频链接:LeetCode:491.递增子序列

题目链接:力扣题目链接

解法1:

class Solution {
public:
    vector path;
    vector> result;
    
    void backtracking(vector& nums, int startIndex){
        // if(startIndexnums[startIndex]){
            // 往下递归,超过子串深度,以及出现所取元素小于子序列最后一个元素
            // return;
        // }
        if(path.size()>1){
            // 至少两个元素
            result.push_back(path);
            // return; 是每个都要放进去,所以不用直接return
        }
        unordered_set uset; // 用set对本层元素进行去重
        // 树层循环 startIndex的大小,控制则往下递归的深度,i的大小控制每层扩展的宽度
        for(int i=startIndex; i> findSubsequences(vector& nums) {
        result.clear();
        path.clear();
        backtracking(nums,0);
        return result;
    }
};

题目:46.全排列

 文章链接:代码随想录

视频链接:LeetCode:46.全排列

题目链接:力扣题目链接

解法1:跟组合不同的是i每层都从0开始,用used控制

class Solution {
public:
    vector path;
    vector> result;
    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();
        vector used(nums.size(), false);
        backtracking(nums,used);
        return result;
    }
};

题目:47.全排列 II

 文章链接:代码随想录

视频链接:LeetCode:47.全排列||

题目链接:力扣题目链接

解法1:

代码随想录算法训练营第二十九天|491.递增子序列、46.全排列、47.全排列 II_第1张图片

class Solution {
public:
    vector path;
    vector> result;
    void backtracking(vector& nums, vectorused){
        // 放入结果数组的判断
        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;
            }
            used[i]=true;
            path.push_back(nums[i]);
            backtracking(nums,used);
            used[i]=false;
            path.pop_back();
        }
    }

    vector> permuteUnique(vector& nums) {
        result.clear();
        path.clear();
        vector used(nums.size(), false);
        sort(nums.begin(), nums.end()); // 不像上题一样需要递增子集,可以进行排序
        backtracking(nums,used);
        return result;
    }
};

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