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]
.
全排列问题,本题不考虑重复问题(因为没有考虑就ac了·····)
用递归方法。拿出第一个数,后面的全排列。拿出第二个数,剩下的(和第一个数交换,就是“后面的”) 全排列。结束条件就是cur等于size
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int>> re;
dfs(re, num, 0);
return re;
}
void dfs(vector<vector<int>> &re, vector<int> &num, int cur){
if(cur==num.size()){
re.push_back(num);
}
else{
for(int i=cur; i<num.size(); i++){
swap(num[i],num[cur]);//交换,总是处理后面cur+1到size个数
dfs(re,num,cur+1);
swap(num[i],num[cur]);
}
}
}
};