LeetCode 78. Subsets
Solution1:我的答案
迭代法,时间复杂度
O(2n)
O
(
2
n
)
,空间复杂度
O(1)
O
(
1
)
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
if (!nums.size()) return res;
res.push_back(vector<int>());
for (int i = 0; i < nums.size(); i++) {
int temp_size = res.size();
for (int j = 0; j < temp_size; j++) {
/*原写法
vector<int> temp = res[j];
temp.push_back(nums[i]);
res.push_back(temp);
*/
//更聪明的写法
res.push_back(res[j]);
res.back().push_back(nums[i]);
}
}
return res;
}
};
Solution2:
递归法,参考自《leetcode-cpp 答案》
时间复杂度
O(2n)
O
(
2
n
)
,空间复杂度
O(n)
O
(
n
)
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> > result;
vector<int> path;
my_subsets(nums, path, 0, result);
return result;
}
void my_subsets(vector<int> &S, vector<int> &path,
int step, vector<vector<int> > &result) {
if (step == S.size()) {
result.push_back(path);
return;
}
//不选S[step]
my_subsets(S, path, step + 1, result);
//选S[step]
path.push_back(S[step]);
my_subsets(S, path, step + 1, result);
path.pop_back();
}
};