解題思路
因為有重複的數字,所以可能會有重複的組合出現。
要避免這種情況,那麼就要知道,這個求解的過程就是每次都在選或不選當下的數字。如果不選,就代表該數字未來也不會選,所以要把 i 往後推。
程式碼
class Solution {
public:
void helper(vector<int>& nums, vector<vector<int>>& ans, vector<int> current, int start)
{
ans.push_back(current);
for(int i=start; i<nums.size(); i++)
{
current.push_back(nums[i]);
helper(nums, ans, current, i+1);
current.pop_back();
int next = i+1;
while(next <nums.size() &&nums[next] == nums[i])
next++;
i = next-1;
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> current;
sort(nums.begin(), nums.end());
helper(nums, ans, current, 0);
return ans;
}
};
沒有留言:
張貼留言