思路
SubSet 問題可以轉換爲一個遞歸問題 {first_item , SubSet(N - 1)} U {SubSet(N - 1)}
。
代碼
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> allSubset = {{}};
for(int i = 0; i < nums.size(); i++){
int allSubsetSize = allSubset.size();
for(int j = 0; j < allSubsetSize; j++){
vector<int> temp(allSubset[j]);
temp.push_back(nums[i]);
allSubset.push_back(temp);
}
}
return allSubset;
}
};
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
unordered_map<int, int> numMap;
vector<vector<int>> allSubset{{}};
int numsCount{0};
for(auto n : nums)
numMap[n]++;
for(auto p : numMap){
numsCount++;
int allSubsetSize = allSubset.size();
for(int i = 1; i <= p.second; i++){
vector<vector<int>> copy(allSubset.begin(), allSubset.begin() + allSubsetSize);
for(int j = 0; j < copy.size(); j++)
copy[j].insert(copy[j].end(), p.second, p.first);
allSubset.insert(allSubset.end(), copy.begin(), copy.end());
}
}
return allSubset;
}
};