给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]解题思路:
DFS;对于3个数的数组而言,有人可能会想到用3层for能够实现,而DFS就是处理个数未知的组合问题,当递归访问的元素个数达到原数组规模的时候,存储访问路径即可。
C++代码 class Solution { public: vector<vector<int>> permute(vector<int>& nums) { N = nums.size(); data = nums; visit = vector<bool>(N, false); vector<int> road; DFS(0,road); return res; } void DFS(int pos, vector<int> road) { if (int (road.size()) == N) { res.push_back(road); } for (int i = 0; i <= N - 1; i++) { if (visit[i] == false) { visit[i] = true; road.push_back(data[i]); int len = road.size(); DFS(i + 1, road); visit[i] = false; road.erase(road.begin() + len - 1, road.end()); } } } private: int N; vector<int> data; vector<bool> visit; vector<vector<int>> res; };