解法1: 这种需要内部for循环,并且retVtr.push_back是在for循环内部
class Solution {
private:
void subsetsHelper(vector<int> &nums, int curIdx, vector<int> &curVtr, vector<vector<int>> &retVtr)
{
if (curIdx == nums.size())
{
return;
}
for (int i=curIdx; i<nums.size(); i++)
{
curVtr.push_back(nums[i]);
retVtr.push_back(curVtr);
subsetsHelper(nums, i+1, curVtr, retVtr);
curVtr.pop_back();
}
}
public:
/**
* @param S: A set of numbers.
* @return: A list of lists. All valid subsets.
*/
vector<vector<int> > subsets(vector<int> &nums) {
// write your code here
vector<vector<int>> retVtr;
vector<int> curVtr;
retVtr.push_back(curVtr);
subsetsHelper(nums, 0, curVtr, retVtr);
return retVtr;
}
};
解法2: 这种不需要for循环,直接 0, 1 操作,并且出口在
curIdx == nums.size() 上
class Solution {
private:
void subsetsHelper(vector<int> &nums, int curIdx, vector<int> &curVtr, vector<vector<int>> &retVtr)
{
if (curIdx == nums.size())
{
retVtr.push_back(curVtr);
return;
}
subsetsHelper(nums, curIdx+1, curVtr, retVtr);
curVtr.push_back(nums[curIdx]);
subsetsHelper(nums, curIdx+1, curVtr, retVtr);
curVtr.pop_back();
}
public:
/**
* @param S: A set of numbers.
* @return: A list of lists. All valid subsets.
*/
vector<vector<int> > subsets(vector<int> &nums) {
// write your code here
vector<vector<int>> retVtr;
vector<int> curVtr;
subsetsHelper(nums, 0, curVtr, retVtr);
return retVtr;
}
};