leetcode 90子集II

简介: leetcode 90子集II

子集II


bdf22557f56443c7a3ac7498901b5ebb.png

9e3949274c8c45c7b4899237b98f9007.png

去重分为层次去重和树枝去重


层次去重

是一个元素只能用一次(一样的两个可以用两次,【1,2,2】两个2各自可用一次)。

if (i > indnx && nums[i] == nums[i - 1] ) continue; 当前的和上一个相同就跳过

树枝去重

是数值一样的元素只能用一个,(一样的两个元素也只能用一次。【1,2,2】两个2只能用一个2)


回溯去重

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    int pre;
    void backtracking(vector<int>& nums , int indnx)
    {
        result.push_back(path);
        if(indnx >= nums.size())return;
        for(int i= indnx ; i < nums.size() ; i++)
        {
            if (i > indnx && nums[i] == nums[i - 1] ) 
            { 
                continue;
            }
            path.push_back(nums[i]);
            backtracking(nums , i+1);
            path.pop_back();
        }
        return;
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        backtracking(nums,0);
        return result;
    }
};

二刷

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void track_back(vector<int>& nums , int indnx)
    {
        if( indnx > nums.size() ) return;
        result.push_back(path);
        for(int i =indnx ; i<nums.size() ; i++)
        {
            if( i!=indnx && nums[i]==nums[i-1] ) continue;
            path.push_back(nums[i]);
            track_back(nums,i+1);
            path.pop_back();
        }
        return;
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        if(nums.size() == 0) return result;
        sort(nums.begin(),nums.end());
        track_back(nums,0);
        return result;
    }
};
相关文章
|
21天前
|
Go
golang力扣leetcode 416.分割等和子集
golang力扣leetcode 416.分割等和子集
29 0
|
21天前
leetcode-1994:好子集的数目
leetcode-1994:好子集的数目
45 0
|
21天前
|
Java
leetcode-78:子集
leetcode-78:子集
24 1
leetcode-78:子集
|
21天前
|
算法
leetcode代码记录(子集
leetcode代码记录(子集
13 0
|
21天前
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
26 0
|
21天前
【Leetcode 78】子集 —— 回溯法
回溯法解题步骤:1. 针对所给问题,定义问题的解空间;2. 确定易于搜索的解空间结构;3. 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索
|
21天前
|
Go
golang力扣leetcode 2044.统计按位或能得到最大值的子集数目
golang力扣leetcode 2044.统计按位或能得到最大值的子集数目
22 0
|
21天前
|
Go
golang力扣leetcode 90.子集II
golang力扣leetcode 90.子集II
19 1
|
21天前
|
Go
golang力扣leetcode 78.子集
golang力扣leetcode 78.子集
15 0
|
21天前
|
Java
leetcode:698-划分为k个相等的子集
leetcode:698-划分为k个相等的子集
21 0
leetcode:698-划分为k个相等的子集