本文主要是介绍leetcode_99 Subsets II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: [1,2,2] Output: [[2],[1],[1,2,2],[2,2],[1,2],[] ]
与题目 subsets 相似,不同点是,数组里面有重复数字
求出所有子数组,里面有重复数字,去重主要进行了以下操作:
1. 对数字进行排序,使相同的数字相邻,这样比较好处理
2. 在进行回溯时,如果不是begin位置的数字,如果与前一个相同都跳过
代码如下:
class Solution {
public:vector<vector<int> > res;void backtrace(vector<int> &nums,vector<int> &sub, int begin){res.push_back(sub);if(begin >= nums.size()){return;}for(int i = begin; i < nums.size(); i++){if(i > begin && nums[i] == nums[i - 1])continue;sub.push_back(nums[i]);backtrace(nums,sub,i + 1);sub.pop_back();}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {res.clear();vector<int> sub;sort(nums.begin(),nums.end());backtrace(nums,sub,0);return res;}
};
这篇关于leetcode_99 Subsets II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!