问题描述:
Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
示例:
If nums = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]问题分析:
除了利用回溯法之外,我们还可以利用迭代法求解。
以[1, 2, 3]
为例子,则子集生成的方法如下:
- 初始化:
[[]]
- 添加第一个元素到所有存在的子集中:
[[], [1]]
; - 添加第二个元素到所有存在的子集中:
[[], [1], [2], [1, 2]]
; - 添加第三个元素到所有存在的子集中:
[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
综上,我们就会发现迭代的规律。
过程详见代码:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> subs(1, vector<int>());
for (int i = 0; i < nums.size(); i++) {
int n = subs.size();
for (int j = 0; j < n; j++) {
subs.push_back(subs[j]);
subs.back().push_back(nums[i]);
}
}
return subs;
}
};