【LeetCode78】-子集

方法一(回溯法)

实现思路

在这里插入图片描述在这里插入图片描述主要就是考虑一个元素还是不放的问题,虽说是回溯的方法但实际上就是暴力的枚举

注意:不要忘记空集也是子集

实现代码

class Solution {
    
    
public:
    void generate(int i,vector<int> item,vector<int>&nums, vector<vector<int>>&re){
    
    
        if(i>=nums.size()) return;
        item.push_back(nums[i]);
        re.push_back(item);
        generate(i+1,item,nums,re);
        item.pop_back();
        generate(i+1,item,nums,re);
    }
    vector<vector<int>> subsets(vector<int>& nums) {
    
    
        vector<vector<int>> re;
        vector<int>item;
        re.push_back(item);
        generate(0,item,nums,re);
        return re;
    }
};

提交结果及分析

在这里插入图片描述
时间复杂度O(2^n)

方法二(位运算法)

实现思路

在这里插入图片描述在这里插入图片描述

实现代码

在这里插入图片描述

分析

时间复杂度O(n)

猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/113813821