[Leetcode] permutations 全排列

Given a collection of numbers, return all possible permutations.

For example,
[1,2,3]have the following permutations:
[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], and[3,2,1].

题意:求给定数列的全排列。

思路:使用DFS,这里有一点值得注意的是,在选取数字压入中间变量时,要确保,没有被访问过,这就要在遍历的同时,维护一个标识数组,标识对应元素的访问情况。代码如下:

 1 class Solution {
 2 public:
 3     vector<vector<int> > permute(vector<int> &num) 
 4     {
 5         vector<int> midVal;
 6         vector<vector<int>> res;
 7         vector<int> visited(num.size(),0);
 8         permuteDFS(num,0,midVal,res,visited);
 9         return res;         
10     }
11 
12     void permuteDFS(vector<int> &num,int lev,vector<int> &midVal,
13     vector<vector<int>> &res,vector<int> &visited)
14     {
15         if(lev==num.size())
16             res.push_back(midVal);
17         else
18         {
19             for(int i=0;i<num.size();++i)
20             {
21                 if(visited[i]==0)
22                 {
23                     visited[i]=1;
24                     midVal.push_back(num[i]);
25                     permuteDFS(num,lev+1,midVal,res,visited);
26                     midVal.pop_back();
27                     visited[i]=0;
28                 }
29                 
30             }
31         }    
32     }
33 };

非递归版,可参加Code  Gander.

原文地址:https://www.cnblogs.com/love-yh/p/7206248.html