题目描述:
给定一个没有重复数字的序列,返回其所有可能的全排列
题目解析:
本题是回溯算法的典型应用。
具体代码如下:
class Solution{
public:
vector<vector<int>> results;
vector<int> path;
vector<bool> used;
void DFS(const vector<int>& nums, int pos){
if(pos==nums.size()) //回溯算法的终止条件,达到了最后一层
{
results.push_back(path); //满足条件,进行结果的保存
return;
}
for(int i=0;i<nums.size();i++){
if(!used[i])
{
path.push_back(nums[i]);
used[i]=true; //使用过了就进行标记
DFS(nums,pos+1); //进行下一轮迭代求解
used[i]=false; //不满足条件了,就释放掉
path.pop_back(); //最后进行回溯,不满足条件要删除
}
}
}
vector<vector<int>> permute(vector<int>& nums){
if(nums.empty()
{
return results;
}
used.resize(nums.size()); //重新分配尺寸大小为nums的长度
DFS(nums,0);
return results;
}
};