解題思路
因為有重複的數字,所以可能會有重複的組合出現。
要避免這種情況,那麼就要知道,這個求解的過程就是每次都在選或不選當下的數字。如果不選,就代表該數字未來也不會選,所以要把 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; } };
沒有留言:
張貼留言