leetcode Permutations II

来源:互联网 发布:微星 主机 知乎 编辑:程序博客网 时间:2024/06/14 05:54

先上题:

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].

这题的思路和Permutation一样,但是这里要去除重复的数字,我在这采用的方法是利用一个map,记录用过的数字,如果用过,则弃置不用。上代码(accept):

class Solution {public:void dfs(vector<vector<int> >& result, vector<int>& tmp, vector<int>& num){if (num.empty()){result.push_back(tmp);return;}map<int, bool> mapping;for (int i = 0; i < num.size(); i++){mapping[num[i]] = false;}for (int i = 0; i < num.size(); i++){if (mapping[num[i]] == false){tmp.push_back(num[i]);mapping[num[i]] = true;auto iter = num.begin();iter += i;vector<int> tmpA = num;num.erase(iter);dfs(result, tmp, num);num = tmpA;tmp.pop_back();}}}vector<vector<int> > permuteUnique(vector<int> &num){vector<vector<int> > result;if (num.empty()){return result;}vector<int> tmp;dfs(result, tmp, num);return result;}};


0 0
原创粉丝点击