leetcode90. 子集 II

去重逻辑:

关键是画出递归树!当我们即将进入第二个2的递归的时候,发现isVisit数组是100,也就是说这俩重复的数是False,并且这俩在nums值相同,所以写出去重逻辑!

cpp 复制代码
class Solution {
public:
    vector<int>* pNums,*pArr=new vector<int>();
    vector<vector<int>> ans;
    vector<bool>* isVisit;
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        pNums=&nums;
        isVisit=new vector<bool>(nums.size(),0);
        ans.push_back(vector<int>());
        dfs(0);
        return ans;
    }
    void dfs(int idx){
        if(idx>=pNums->size()){
            return;
        }
        for(int i=idx;i<pNums->size();++i){
            if(i>=1 && (*pNums)[i-1]==(*pNums)[i] && (*isVisit)[i-1]==0 && (*isVisit)[i]==0){ 
                continue;
            }
            if(!((*isVisit)[i])){
                pArr->push_back((*pNums)[i]);
                ans.push_back(*pArr);
                (*isVisit)[i]=1;
            }
            dfs(i+1);
            pArr->pop_back();
            (*isVisit)[i]=0;

        }
    }
};
相关推荐
不穿格子的程序员13 小时前
从零开始写算法——回溯篇2:电话号码的字母组合 + 组合总和
算法·深度优先·回溯
大锦终19 小时前
dfs解决FloodFill 算法
c++·算法·深度优先
山峰哥20 小时前
SQL调优实战:让查询效率飙升10倍的降本密码
服务器·前端·数据库·sql·编辑器·深度优先
iAkuya1 天前
(leetcode)力扣100 45二叉树的右视图(dfs,bfs)
leetcode·深度优先·宽度优先
大锦终1 天前
递归回溯综合练习
c++·算法·深度优先
嵌入式进阶行者1 天前
【算法】深度优先搜索实例:华为OD机考双机位A卷- 中庸行者
c++·算法·华为od·深度优先
BLSxiaopanlaile2 天前
关于子集和问题的几种解法
数据结构·算法·剪枝·回溯·分解
不穿格子的程序员2 天前
从零开始写算法——回溯篇1:全排列 + 子集
算法·leetcode·深度优先·回溯
山峰哥3 天前
数据库工程实战:一招实现 SQL 查询速度 10 倍提升
android·数据库·sql·编辑器·深度优先
共享家95273 天前
力扣刷题之路
算法·leetcode·深度优先