题目:
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
思路:
dfs,注意递归结束条件是vector中的数目等于题目给出的vector为止。
代码如下:
class Solution {
public:
int vis[1005],Size;
vector<vector<int>>ans;
void dfs (int num,vector<int> v,vector<int>& nums)
{
if(num==Size)
{
ans.push_back(v);
return;
}
for (int i=0;i<nums.size();i++)
{
int t=nums[i];
if(vis[i]==0)
{
vis[i]=1;
v.push_back(t);
dfs(num+1,v,nums);
v.pop_back();
vis[i]=0;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
memset (vis,0,sizeof(vis));
vector<int> v;
Size=nums.size();
if(Size==0)
return ans;
dfs(0,v,nums);
return ans;
}
};