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]
.
递归,每次递归只确定一位的元素选择问题,用数组visited存储元素是否已被选择过,递归结束记得后把当前元素设置为未访问,即将visited值设为0.
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > res;
if(num.size()){
vector<int> visited(num.size(), 0);
vector<int> cur(num.size());
recur(res, num, visited, cur, num.size());
}
return res;
}
void recur(vector<vector<int> > &res, vector<int> &num, vector<int> &visited, vector<int> &cur, int n){
if(n==0){
res.push_back(cur);
return;
}
int index=num.size()-n;
for(int i=0; i<num.size(); ++i){
if(!visited[i]){
cur[index]=num[i];
visited[i]=1;
recur(res, num, visited, cur, n-1);
visited[i]=0;
}
}
}
};