1. 递归解法
1.1 递归解法1
- 思路比较清晰,每个元素都有两种可能性:选或者不选,直接上代码
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> > result;
vector<int> subset;
sort(nums.begin(), nums.end());
subsets(nums, 0, result, subset);
return result;
}
void subsets(vector<int>& nums, int pos, vector<vector<int> >& result, vector<int>& subset) {
if(pos == nums.size()) {
result.push_back(subset);
return;
}
// 不选当前元素
subsets(nums, pos + 1, result, subset);
// 选当前元素
subset.push_back(nums[pos]);
subsets(nums, pos + 1, result, subset);
// 弹出当前元素,已进行下一轮递归
subset.pop_back();
}
};
1.2 递归解法2
- 用一个数组标记每个元素的选择情况,其他和解法1相同