题目描述
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
代码
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int>> ret;
permuteCore(num,0,ret);
return ret;
}
void permuteCore(vector<int> &num,int index,vector<vector<int>> &ret)
{
if(index == num.size())
{ //这里利用了原数组存放结果排列的临时结果
ret.push_back(num);
return;
}
else
{
//枚举遍历每个位置各个不同的情况
//这里使用了原数组作为候选值集合,对于当前位置index,index之前的已经
//用过了,因此要从index开始枚举候选元素
for(int i = index;i<num.size();i++)
{
swap(num[index],num[i]);
permuteCore(num,index+1,ret);
swap(num[index],num[i]);
}
}
}
};