leetCode 46. 全排列(dfs/c++)

  1. 全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列。

示例:

输入: [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 ;
    }
};
经验分享 程序员 微信小程序 职场和发展