leetCode 46. 全排列(dfs/c++)
- 全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
// A code block 看到这道题我的第一思路就是dfs求解这个问题 就是刚开始在leetcode编写代码,是相当的不熟练,出现了许多错误 但是主要的思路就是在dfs里面
class Solution {
public:
vector<vector<int>>ans;
vector<int>res;
vector<vector<int>> permute(vector<int>& nums) {
int n=nums.size();
vector<int>book(n);
for(int i=0;i<n;i++)
{
book[i]=0;
}
dfs(nums,0,book);
return ans;
}
void dfs(vector<int>nums,int step,vector<int>&book)
{
int n=nums.size();
if(step>=n)
{
ans.push_back(res);
return ;
}
for(int i=0;i<nums.size();i++)
{
if(book[i]==0)
{
res.push_back(nums[i]);
book[i]=1;//放到抽屉里
dfs(nums,step+1,book);
res.pop_back();//这一步是很重要的,已经排列过的,下一次就不在出现在序列里面
book[i]=0;//同上,已经从抽屉里拿出,
}
}
return ;
}
};
