地址:http://oj.leetcode.com/problems/permutations-ii/
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]
.
对不改变的vector如num记得在参数前加上const,能用引用的参数尽量用引用,提高运算速度减少内存开销。
参考代码:
class Solution {
public:
void dfs(vector<vector<int>>&ans, vector<bool>&visited, vector<int>&vec, const vector<int>&num)
{
if(vec.size()==num.size())
{
ans.push_back(vec);
return;
}
for(int i = 0; i<num.size(); ++i)
{
if(i && num[i]==num[i-1] && !visited[i-1])
continue;
if(!visited[i])
{
visited[i] = true;
vec.push_back(num[i]);
dfs(ans, visited, vec, num);
vec.pop_back();
visited[i] = false;
}
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
vector<vector<int> >ans;
if(num.empty())
return ans;
vector<bool>visited(num.size(), false);
vector<int>vec;
sort(num.begin(), num.end());
dfs(ans, visited, vec, num);
return ans;
}
};