Given a set of distinct integers, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
对于题目中给的例子[1,2,3]来说,最开始是空集,那么我们现在要处理1,就在空集上加1,为[1],现在我们有两个自己[]和[1],下面我们来处理2,我们在之前的子集基础上,每个都加个2,可以分别得到[2],[1, 2],那么现在所有的子集合为[], [1], [2], [1, 2],同理处理3的情况可得[3], [1, 3], [2, 3], [1, 2, 3], 再加上之前的子集就是所有的子集合了。
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> s;
s.push_back(1);
s.push_back(2);
s.push_back(3);
vector<vector<int>> res(1);
sort(s.begin(), s.end());
for (int i = 0; i < s.size(); i++){
int size = res.size();
for (int j = 0; j <size; j++){
res.push_back(res[j]); //把第一位加到末尾 假设第一位为:【1】
res.back().push_back(s[i]);// 把刚加入的【1】的末尾加入2——》【1,2】(res.back()最末尾的元素,即刚加入的【1】)
}
}
for (int i = 0; i < res.size(); i++){
for (int j = 0; j < res[i].size(); j++){
cout << res[i][j] << " ";
}
cout << endl;
}
}