算法课第三周作业 | Subsets
2017-03-12 17:57
274 查看
写在前面:
本周算法课老师讲解了DFS,特此选一道可以用DFS解决的题目。
题意解读:
给定一个整数集,里面的整数互不相同,输出这个数组的所有子集。
解题思路:
如果将整数集的每个元素都看成一个点,点与点之间相互联通,那么所有子集既是找出点到点间所有不重复的路径。
每多一个元素,子集就是原来所有子集加上原来所有子集到这个元素的路径。如:
当集是空时,子集是[]。
当子集有1个元素[1]时,子集是[],[1]
当子集有2个元素[1,2]时,子集是[],[1],[2],[1,2]
当子集有3个元素[1,2,3]时,子集是[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]
……
那问题就简化成每次拿出一个元素,找出剩下元素的所有子集,迭代到集合是空时。
用DFS深度优先的思想,反过来做以上步骤,遍历二叉树,每一步的路径(子集)都保存。
我们需要一个vector来存储这些路径,定义private变量result来保存。
代码:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> temp;
sort(nums.begin(), nums.end());
DFS(0, nums, temp);
return results;
}
void DFS(int pos, vector<int>& nums, vector<int> seq){
results.push_back(seq);
for(; pos < nums.size(); pos++){
seq.push_back(nums[pos]);
DFS(pos+1, nums, seq);
seq.pop_back();
}
}
private:
vector<vector<int>> results;
};
运行结果:
提交后,Accepted。
本周算法课老师讲解了DFS,特此选一道可以用DFS解决的题目。
题意解读:
给定一个整数集,里面的整数互不相同,输出这个数组的所有子集。
解题思路:
如果将整数集的每个元素都看成一个点,点与点之间相互联通,那么所有子集既是找出点到点间所有不重复的路径。
每多一个元素,子集就是原来所有子集加上原来所有子集到这个元素的路径。如:
当集是空时,子集是[]。
当子集有1个元素[1]时,子集是[],[1]
当子集有2个元素[1,2]时,子集是[],[1],[2],[1,2]
当子集有3个元素[1,2,3]时,子集是[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]
……
那问题就简化成每次拿出一个元素,找出剩下元素的所有子集,迭代到集合是空时。
用DFS深度优先的思想,反过来做以上步骤,遍历二叉树,每一步的路径(子集)都保存。
我们需要一个vector来存储这些路径,定义private变量result来保存。
代码:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> temp;
sort(nums.begin(), nums.end());
DFS(0, nums, temp);
return results;
}
void DFS(int pos, vector<int>& nums, vector<int> seq){
results.push_back(seq);
for(; pos < nums.size(); pos++){
seq.push_back(nums[pos]);
DFS(pos+1, nums, seq);
seq.pop_back();
}
}
private:
vector<vector<int>> results;
};
运行结果:
提交后,Accepted。
相关文章推荐
- 普林斯顿算法课第三周作业
- 第三周作业——冒泡排序和归并排序(运行归并算法)
- 第三周算法作业冒泡排序1114班
- 第三周算法作业
- 算法作业_5(2017.3.7第三周)
- 算法课程Leetcode作业第三周技术博客
- 算法第三周作业02
- 算法分析与设计课程作业第三周#1
- neural network for machine learning(第三周编程作业)----感知机算法
- 第三周项目二顺序表算法库
- 第三周作业
- BZOJ3236 作业 [莫队算法][树状数组]
- C语言--第三周作业评分和总结(5班)
- 第三周作业之一
- 算法课作业2.5(寻找L<x<U在排好序的数组A中)
- 算法分析与设计第三周
- 短作业优先(SJF)算法
- 算法设计课作业证明题
- C语言第三周作业---单层循环
- 算法作业:证明题(3)-- 8.10