dfs(自用-子集)
老规矩,依旧以题代练。
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例:
输入:nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
核心代码如下:
class Solution { private: vector<vector<int>> ans; int n; public: void dfs(int step,vector<int>&path,vector<int>&nums){ if(step==n){ ans.push_back(path); return; } dfs(step+1,path,nums); path.push_back(nums[step]); dfs(step+1,path,nums); path.pop_back(); } vector<vector<int>> subsets(vector<int>& nums) { n=nums.size(); vector<int> path; dfs(0,path,nums); return ans; } };下面用一张图把以[1,2,3]为例的完整dfs算法的过程手绘出来,以便理解。因为传递值的时候有&引用,所以整个过程共用一个path,-->所指是传入ans的内容
