子集
与中序遍历N叉树非常的类似
每一个子集就是一个节点,遍历所有的节点
回溯遍历法(不要简单问题复杂化)
class Solution { public: vector<vector<int>> result; vector<int> path; void backtracking(vector<int>& nums , int indnx ) { //每一个节点都加入,无须判断节点 result.push_back(path); //如果遍历指针大于等于最深处,就返回 if(indnx >= nums.size()) return; //横向循环 for(int i=indnx ; i < nums.size() ; i++ ) { //新值压入 path.push_back(nums[i]); backtracking(nums,i+1);//递归 path.pop_back();//回溯 } return; } vector<vector<int>> subsets(vector<int>& nums) { backtracking(nums,0); return result; } };
二刷
class Solution { public: vector<vector<int>> result; vector<int> path; void track_back(vector<int>& nums , int indnx) { if(indnx > nums.size() ) return; result.push_back(path); for(int i=indnx ; i<nums.size() ;i++) { path.push_back(nums[i]); track_back(nums,i+1); path.pop_back(); } return; } vector<vector<int>> subsets(vector<int>& nums) { if(nums.size() == 0) return result; track_back(nums,0); return result; } };