利用回溯法解决全排列问题。
- 题目:
给定一个没有重复数字的序列,返回其所有可能的全排列。 - 示例:
输入: [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>& nums) {
res.clear();
if(nums.size()==0) return res;
used=vector<bool>(nums.size(),false);
vector<int> p;
generatePermutation(nums,0,p);
return res;
}
private:
vector<vector<int> > res;
vector<bool> used;
//p中保存了一个有index个元素的排列
//向这个排列的末尾添加第index+1个元素,获得一个有index+1个元素的排列
void generatePermutation(const vector<int>&nums,int index,vector<int>& p){
if(index==nums.size()){
res.push_back(p);
return;
}
for(int i=0;i<nums.size();i++){
if(!used[i]){
//将nums[i]加入到p中
p.push_back(nums[i]);
used[i]=true;
//递归
generatePermutation(nums,index+1,p);
//状态回溯
p.pop_back();
used[i]=false;
}
}
return;
}
};