方法一(回溯法)
实现思路
主要就是考虑一个元素还是不放的问题,虽说是回溯的方法但实际上就是暴力的枚举
注意:不要忘记空集也是子集
实现代码
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)