标签:回溯 oid lazy amp alt leetcode public ssi loading
https://leetcode-cn.com/problems/subsets/submissions/
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
class Solution { public: void generate(int i,vector<int>& nums,vector<int>& item,vector<vector<int>>& res){ if(i >= nums.size()) return; //选择放入i个元素 item.push_back(nums[i]); res.push_back(item); generate(i+1,nums,item,res); //不放入nums[i] item.pop_back(); generate(i+1,nums,item,res); } //可以利用循环,也可以利用dfs+回溯 vector<vector<int>> subsets(vector<int>& nums) { vector<int> item; vector<vector<int>> res; res.push_back(item); generate(0,nums,item,res); return res; } };
位运算法
class Solution { public: //法二 位运算法 vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> res; int all_set = pow(2,nums.size()); for(int i=0;i<all_set;i++){ vector<int> item; for(int j=0;j<nums.size();j++){ int set = 1; set = set << (nums.size()-j-1); if(set & i){ item.push_back(nums[j]); } } res.push_back(item); } return res; } };
标签:回溯 oid lazy amp alt leetcode public ssi loading
原文地址:https://www.cnblogs.com/wsw-seu/p/13201954.html