您的位置:首页 > 其它

LeetCode Permutations II

2014-08-22 00:32 267 查看
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]
.

思路:

如果是先排列,插入时检查是否重复会超时,所以必须递归排列的时候检查数字是否在之前出现过,如果出现了,就跳过去(注意每次检查的起始位置是 start, 不是从 0 开始的)。

class Solution {
public:
vector<vector<int> > permuteUnique(vector<int> &num) {
vector<vector<int> > ivecArray;
if (num.size() == 0)
return ivecArray;
recursive(ivecArray, num, 0);
return ivecArray;
}

void recursive(vector<vector<int> > &ivecArray, vector<int> num, int start) {
int n = num.size();
if (start == n) {
ivecArray.push_back(num);
return;
}
for (int i = start; i < n; i++) {
int j = 0;
for (j = start; j < i; j++) {    //注意 j 的取值范围
if (num[j] == num[i])
break;
}
if (j < i)
continue;
swap(num[i], num[start]);
recursive(ivecArray, num, start + 1);
swap(num[i], num[start]);
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode