题目描述:
思路:回溯,框架如下
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
//存储结果
vector<vector<int>>res;
//存储路径
vector<int>track;
//回溯算法
backtrack(nums,track,res);
return res;
}
//注意形参要以&引用的形式
void backtrack(vector<int>&nums,vector<int>&track,vector<vector<int>>&res){
//满足条件,添加路径
if(track.size()==nums.size()){
res.push_back(track);
return;
}
for(int i=0;i<nums.size();i++){
//选择满足条件的nums[i],即track中不存在
vector<int>::iterator iter=find(track.begin(),track.end(),nums[i]);
if(iter!=track.end())
continue;
//选择
track.push_back(nums[i]);
//递归
backtrack(nums,track,res);
//撤销选择
track.pop_back();
}
}
};