Day131 | 灵神 | 回溯算法 | 子集型 子集

78.子集

78. 子集 - 力扣(LeetCode)

思路:

笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧

回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili

完整代码:

选或不选

image-20250610171702417

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
void backtracking(vector<int>& nums,int index)
{
if(index==nums.size())
{
res.push_back(path);
return;
}
//不选
backtracking(nums,index+1);

//选
path.push_back(nums[index]);
backtracking(nums,index+1);
path.pop_back();
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums,0);
return res;
}
};

枚举选哪个

image-20250610171628126

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
void backtracking(vector<int>& nums,int index)
{
res.push_back(path);
for(int i=index;i<nums.size();i++)
{
path.push_back(nums[i]);
backtracking(nums,i+1);
path.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums,0);
return res;
}
};