您的位置:首页 > 其它

leetcode: Permutations II

2013-11-14 14:58 281 查看
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].


思路

如果前面Permutations的问题已经解决了的话,这个问题就变得非常简单。先排个序,以[1, 1, 2]为例,第一个1处理过以后,第二个1就可以跳掉了。

class Solution {
public:
void internalpermuteUnique(vector<int> &num, int index, vector<int> &perm, vector<vector<int> > &result) {
int size = num.size();

if (size == index) {
result.push_back(perm);
}
else {
for (int i = index; i < size; ++i) {
if ((i > index) && (num[i] == num[index])) {
continue;
}
else {
swap(num[index], num[i]);
}

perm.push_back(num[index]);
internalpermuteUnique(num, index + 1, perm, result);
perm.pop_back();
}

sort(num.begin() + index, num.end());
}
}

vector<vector<int> > permuteUnique(vector<int> &num) {
vector<vector<int> > result;
vector<int> perm;

sort(num.begin(), num.end());
internalpermuteUnique(num, 0, perm, result);

return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: