版本1:回溯。startIndex
用来记录的遍历到第几个数了。
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums, 0); // startIndex从0开始
return res;
}
void backtracking(vector<int>& nums, int startIndex){
res.push_back(path); // 将每个遍历方案先加入结果
if(startIndex >= nums.size()){ // 终止条件可以不写
return;
}
for(int i = startIndex; i < nums.size(); i++){
path.push_back(nums[i]); // 添加当前数
backtracking(nums, i + 1); // 递归
path.pop_back(); // 回溯
}
}
};
时间复杂度
:
O
(
n
∗
2
n
)
O(n*2^n)
O(n∗2n)
空间复杂度
:
O
(
n
)
O(n)
O(n)