leetcode之Permutations II
2014-05-08 21:32
246 查看
原题如下:
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
and
之前的Permutations是没有重复元素的情况,当时只需用map记录当前元素是否用过然后深度遍历即可,而在这道题中,因为有重复元素,所以涉及去重问题,在前缀相同的情况下,不允许一个位置出现重复的元素(即仅出现一次即可),这与之前的从数列中寻找满足给定和的序列的题目相似但不相同leetcode之Combination
Sum && Combination Sum II,要注意区分去重的时机和方法,我对比看了下都有点儿晕了。。。
因为昨天下午做的求特定和的序列问题,今上午刚好又看了下没有重复元素的情况下的全排列问题,所以这道题是自己码出来的,但AC后对这道题理解的才更加透彻了些,在涉及重复元素问题时首先进行排序貌似是很有好处的。。。
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2]have the following unique permutations:
[1,1,2],
[1,2,1],
and
[2,1,1].
之前的Permutations是没有重复元素的情况,当时只需用map记录当前元素是否用过然后深度遍历即可,而在这道题中,因为有重复元素,所以涉及去重问题,在前缀相同的情况下,不允许一个位置出现重复的元素(即仅出现一次即可),这与之前的从数列中寻找满足给定和的序列的题目相似但不相同leetcode之Combination
Sum && Combination Sum II,要注意区分去重的时机和方法,我对比看了下都有点儿晕了。。。
class Solution { public: vector<vector<int> > permuteUnique(vector<int> &num) { sort(num.begin(),num.end()); vector<vector<int>>vv; vector<int>v; map<int,int>mp; for(int i = 0; i < num.size(); i++){ if(mp.find(num[i]) != mp.end()) mp[num[i]]++; else mp[num[i]] = 1; } permute(vv,v,num,mp); return vv; } void permute(vector<vector<int>>&vv,vector<int>v,vector<int>num,map<int,int>mp){ if(v.size() == num.size()){ vv.push_back(v); return ; } for(int i = 0; i < num.size(); i++){ while(i > 0 && i < num.size() && num[i] == num[i - 1]) i++; if(i == num.size()) //后边的数全一样,提前结束遍历 return; if(mp[num[i]] > 0) { mp[num[i]]--; v.push_back(num[i]); permute(vv,v,num,mp); v.pop_back(); mp[num[i]]++; } } } };
因为昨天下午做的求特定和的序列问题,今上午刚好又看了下没有重复元素的情况下的全排列问题,所以这道题是自己码出来的,但AC后对这道题理解的才更加透彻了些,在涉及重复元素问题时首先进行排序貌似是很有好处的。。。
相关文章推荐
- [Leetcode 47, Hard] Permutations II
- leetcode 刷题之路 77 Permutations II
- LeetCode-47-Permutations II(DFS/剪枝)-Medium
- leetCode_Permutations II
- [leetcode] 47.Permutations II
- leetcode第一刷_Permutations II
- LeetCode - Permutations II
- LeetCode第47.题之Permutations II
- LeetCode——Permutations II
- leetcode-Permutations II
- 【leetcode 排列组合问题】Next Permutation | Permutations | Permutations II | Permutation Sequence
- [LeetCode] Permutations II
- leetcode 47. Permutations II
- LeetCode---Permutations II
- Permutations II(leetcode)
- LeetCode(47)Permutations II
- LeetCode-47-Permutations II 递归+dict
- 【LeetCode with Python】 Permutations II
- LeetCode:Permutations II
- LeetCode47_Permutations II