LeetCode 47.Permutations II
2015-02-26 01:17
316 查看
题目:
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
and
分析与解答:
这个题比上个题目更难了,问题的关键在于如何判断重复。我自己的方法是先排序,然后遇到重复进栈的数就跳过。
网上有一个更简洁的版本:
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].
分析与解答:
这个题比上个题目更难了,问题的关键在于如何判断重复。我自己的方法是先排序,然后遇到重复进栈的数就跳过。
class Solution { public: vector<vector<int> > result; vector<vector<int> > permuteUnique(vector<int> &num) { sort(num.begin(),num.end()); vector<int> tempresult; vector<int> path;//存放选过数的下标 dfs(num,tempresult,path); return result; } void dfs(vector<int> &num,vector<int> &tempresult,vector<int> &path){ if(tempresult.size() == num.size()){ result.push_back(tempresult); return; } int last = INT_MAX; for(int i = 0;i < num.size();++i){ auto index = find(path.begin(),path.end(),i); if(index == path.end() && num[i] != last){//这个数没被选过 tempresult.push_back(num[i]); path.push_back(i); dfs(num,tempresult,path); tempresult.pop_back(); path.pop_back(); last = num[i]; } } } };
网上有一个更简洁的版本:
class Solution { public: void recursion(vector<int> num, int i, int j, vector<vector<int> > &res) { if (i == j-1) { res.push_back(num); return; } for (int k = i; k < j; k++) { if (i != k && num[i] == num[k]) continue; swap(num[i], num[k]); recursion(num, i+1, j, res); } } vector<vector<int> > permuteUnique(vector<int> &num) { sort(num.begin(), num.end()); vector<vector<int> >res; recursion(num, 0, num.size(), res); return res; } };
相关文章推荐
- [LeetCode]--47. Permutations II
- leetcode 47. Permutations II
- Leetcode 47. Permutations II (Medium) (cpp)
- LeetCode 47. Permutations II
- [Leetcode 101] 47 Permutations II
- Leetcode 47 Permutations II
- LeetCode-47-Permutations II 递归+dict
- leetcode 47:Permutations II
- LeetCode 47 Permutations II
- leetcode47. Permutations II
- LeetCode47 Permutations II
- [leetcode] 47.Permutations II
- [LeetCode]--47. Permutations II
- Leetcode 47 Permutations II
- leetcode 47 : Permutations II
- LeetCode-47.Permutations II
- 【LeetCode-47】Permutations II
- [LeetCode]47.Permutations II
- Leetcode 47. Permutations II
- LeetCode47——Permutations II