您的位置:首页 > 其它

[Leetcode] permutations 全排列

2017-07-19 15:59 459 查看

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.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: