LeetCode 491. 递增子序列(回溯如何去重、决策的限制)

491. 递增子序列
回溯法没什么可说的,关键是如何去重,可以用set,也可以类似使用字符串hash。
还有就是下面这种做法。
假设有两个相同的元素,有四种情况,用0表示不选、1表示选。
0 0
0 1
1 0
1 1
发现3、4种情况重复了,于是强制如果当前元素和上一次选的元素重复的了,就必须要选。

class Solution {
    
    
public:
    vector<vector<int>> ans;
    vector<int> v;
    vector<vector<int>> findSubsequences(vector<int>& nums) {
    
    
        dfs(nums,-110,0);
        return ans;
    }
    void dfs(const vector<int>& a,int last,int i){
    
    
        if(i==a.size()){
    
    
            if(v.size()>1) ans.push_back(v);
            return;
        }
        if(a[i]>=last){
    
    
            v.push_back(a[i]);
            dfs(a,a[i],i+1);
            v.pop_back();
        }
        if(a[i]!=last) dfs(a,last,i+1);
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/108236430