算法练习第24天|78.子集、 90.子集II

 78.子集

78. 子集 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/subsets/

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;

    void backTracking(vector<int> & nums, int startIndex){
        if(startIndex == nums.size()){
            return;
        }

        for(int i = startIndex; i<nums.size(); i++){
            path.push_back(nums[i]); //记录节点
            result.push_back(path);  //result直接记录
            backTracking(nums, i+1);
            path.pop_back();
        }
    }

    vector<vector<int>> subsets(vector<int>& nums) {
        result.clear();
        path.clear();
        result.push_back(path); //空集
        backTracking(nums,0);
        return result;
    }
};

  90.子集II

90. 子集 IIicon-default.png?t=N7T8https://leetcode.cn/problems/subsets-ii/去除重复元素带来的重复子集,其思想与第40题组合总和II一样,可以参考这篇文章:算法练习第22天|39. 组合总和、40.组合总和II-CSDN博客

对应的树形结构如下:

重复发生在树形结构的每一层的非左子树上。 所以在单层遍历的逻辑结构上,要做限定:

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backTracking(vector<int>& nums, int startIndex){
        if(startIndex == nums.size()){
            return;
        }

        for(int i = startIndex; i < nums.size(); i++){
            //重复发生在同一树层的非左树枝,非左树枝用i>startIndex限制,相同元素是排序后当前元素等于其前一个元素
            if(i > startIndex && nums[i] == nums[i-1])
                continue;
            path.push_back(nums[i]);
            result.push_back(path);
            backTracking(nums,i+1);
            path.pop_back();
        }

    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        result.clear();
        path.clear();
        sort(nums.begin(), nums.end());
        result.push_back(path);//空集
        backTracking(nums,0);
        return result;

    }
};

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值