這題避免重複的方法跟 # 40 - Combination Sum II 以及 # 47 - Permutation II 有異曲同工之妙,可以一起複習。
class Solution { public: vector<vector<int>> subsetsWithDup(vector<int>& nums) { vector<vector<int>> res; vector<int> tmp; sort(nums.begin(), nums.end()); helper(nums, res, tmp, 0); return res; } private: void helper(vector<int>& nums, vector<vector<int>>& res, vector<int>& tmp, int start) { res.push_back(tmp); for(int i=start; i<nums.size(); i++) { if(i>start && nums[i] == nums[i-1]) continue; tmp.push_back(nums[i]); helper(nums, res, tmp, i+1); tmp.pop_back(); } } };
這個實作的效率還 OK: Runtime: 8 ms, faster than 84.71% of C++ online submissions for Subsets II. Memory Usage: 9.3 MB, less than 86.36% of C++ online submissions for Subsets II.
Last updated 4 years ago