[LeetCode] Permutations II

来源:互联网 发布:动力学分析软件 编辑:程序博客网 时间:2024/05/16 12:21

问题:

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

分析:

这道题跟上一道题相似(点击这里)。但出现了重复元素这件事我们得小心一点。处理的方法是:每一次跟后面的元素swap之前,先检查一下后面这个元素之前是不是出现过。如果出现过,则continue;否则才交换。


代码(O(n!)):

class Solution {public:bool already_swaped(int index, int i, const vector<int> &num) {for (int j = index; j < i; j ++) {if (num[j] == num[i])return true;}return false;}vector<vector<int> > permuteUnique(vector<int> &num) {vector<vector<int> > result;if (num.size() == 0)return result;permuteHelper(num, result, 0);return result;}void permuteHelper(vector<int> &num, vector<vector<int> > & result, int index) {if (index == num.size()) {result.push_back(num);return;}for (int i = index; i < num.size(); i ++) {if (already_swaped(index, i, num)) continue;int temp = num[i];num[i] = num[index];num[index] = temp;permuteHelper(num, result, index + 1);num[index] = num[i];num[i] = temp;}}};


0 0
原创粉丝点击