给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
解题思路:
组合问题,直接DFS,注意空集是所有集合的子集。分别求解0-nums.size()个元素的集合。
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { data = nums; int size = nums.size(); for (int i = 1; i <= size; i++) { PUSH(i); } return res; } void PUSH(int k) {//将k元素集合追加到res中 vector<int> road; DFS(road, 0, k); } void DFS(vector<int> road,int pos,int k) { if (k == 0) res.push_back(road); for (int i = pos; i <= int(data.size()) - 1; i++) { road.push_back(data[i]); DFS(road, i + 1, k - 1); road.pop_back(); } } private: vector<vector<int>> res = { {} }; vector<int> data; }; |