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].
class Solution {
public:
vector<vector<int> > re;
vector<vector<int> > permuteUnique(vector<int> &num) {
map<int , int> m;
int size = num.size();
vector <int> result;
for(int i = 0; i < size ;i++)
{
m[num[i]]++;
}
per(result,0,0,m,size);
return re;
}
void per(vector<int> now ,int flag, int put,map<int , int> m,int size)
{
if(flag == 1)
{
now.push_back(put);
m[put]--;
if(now.size() == size)
{
re.push_back(now);
return;
}
}
else flag =1;
for(map<int ,int>::iterator iter = m.begin();iter !=m.end() ;iter++)
{
if(iter->second > 0)
{
per(now ,1, iter->first,m,size);
}
}
}
};
用dfs应该会更快。但是用dfs需要先排一下序。 n log n,之后用n^2进行取元素。
我用map思路相似,但是每次取元素都需要加一个
posted on 2014-03-24 14:00 pengyu2003 阅读(107) 评论(0) 收藏 举报
浙公网安备 33010602011771号