【LeetCode 90】子集 II

题目链接

【题解】


我们在枚举下一个要取哪个数字的时候。

1112233
for (int i = start;i<=n;i++)
//其中start-1是上一次取的位置。
如果i>start且num[i]==num[i-1].
那么我们就不应该再取这个num[i]了。
因为肯定在之前已经取过num[i-1]了。此时再取一个num[i]的话。所得到的方案肯定会和
11*****一样了
(其中i==start的话得到的是111****所以可以取)

【代码】

class Solution {
public:
    vector<vector<int>> ans;

void dfs(vector<int> &v,int start,vector<int> &temp){
    ans.push_back(temp);
    for (int i = start;i<(int)v.size();i++){
        if (i>start && v[i]==v[i-1]) continue;
        temp.push_back(v[i]);
        dfs(v,i+1,temp);
        temp.pop_back();
    }
}

vector<vector<int>> subsetsWithDup(vector<int> v){
    sort(v.begin(),v.end());
    ans.clear();
    vector<int> t;t.clear();
    dfs(v,0,t);
    return ans;
}

};

猜你喜欢

转载自www.cnblogs.com/AWCXV/p/11954576.html