某不知名学校大二算法课实验报告
题目来自力扣
第一题:幂集
力扣题目链接:幂集
题目描述:
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
经典的递归实现指数型枚举的模板题
画出递归搜索树,一层一层递归回溯即可
注意每次要恢复现场
模板大体如下:
void backtracking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}
注释+代码如下:
class Solution {
public:
vector<vector<int>>res; //答案
vector<int>temp; //保存路径
void dfs(vector<int>&nums, int value, int j)
{
if(value == temp.size()) //选到最后一个数时
{
res.push_back(temp); //保存路径
}
for(int i = j ; i < nums.size(); i ++ )
{
temp.push_back(nums[i]);
dfs(nums,value, i + 1);
temp.pop_back();//还原现场
}
}
vector<vector<int>> subsets(vector<int>& nums) {
int n = nums.size();
for(int i = 1; i <= n; i ++ )
{
dfs(nums, i , 0); // 传入数组,第几个数,已选第几个数
}
res.push_back(vector<int>{})

报告详细解读了力扣平台上五个经典算法题,涉及幂集子集生成、N皇后问题、全排列等,强调递归与搜索策略在解决问题中的应用。

5416

被折叠的 条评论
为什么被折叠?



