给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
像这类题,选与不选,最开始想到的就是分情况递归。选1与不选1,同时要结合题意进行答案的输出。
子集包含空,最开始就把结果添加进去,然后每添加一个,就把结果添加进去。看了有的题解说的是回溯,我感觉回溯是会回头的方法,这道题的题意讲的是从不回头,因为1选了就不会再选1了,所以这里要设置现在的结果遍历到第几个了,以后都会从这个结果之后进行开始。
class Solution { public: vector<vector<int>> r; vector<vector<int>> subsets(vector<int>& nums) { vector<int> res; solve(res,nums,0); return r; } void solve(vector<int> res, vector<int> nums, int start) { r.push_back(res); for(int i = start; i < nums.size(); i++) { res.push_back(nums[i]); solve(res,nums,i+1); res.pop_back(); } } };