Given a collection of numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
.
Have you met this question in a real interview?
Yes
No
class Solution {
vector<vector<int> > result;
vector<int> single;
vector<bool> flag;
public:
vector<vector<int> > permute(vector<int> &num) {
if(num.size()==0)
return result;
sort(num.begin(), num.end());
for(int i=0; i<num.size(); i++){
flag.push_back(false);
single.push_back(num[i]);
}
bk(num, 0);
return result;
}
void bk(vector<int> &num, int index){
if(index==num.size()){
result.push_back(single);
return;
}
int preNum = num[0]-1;
for(int i=0; i<num.size(); i++){
if(!flag[i]&&preNum!=num[i]){ //注意会出现重复数字!!
preNum=num[i];
flag[i]=true;
single[index]=num[i];
bk(num, index+1);
flag[i]=false;
}
}
}
};