题目:
Given a collection of distinct 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], [3,2,1] ]
解读:给予一组含有n个元素的整数数组,无重复元素,列举他们所有组合可能。
思路:dfs(深度优先搜索)思想。想象这是一张任意两个点都相互连接的无相图,目的是要列举出所有包含n个点的dfs路径。
代码:class Solution { public: void dfs(vector<int>& nums, vector<vector<int>>& result, int depth, vector<int>& temp, int* visited ) { for(int i = 0; i < nums.size(); i++){ if(depth == nums.size()) { result.push_back(temp); return; } if(visited[i] == 0){ temp.push_back(nums[i]); visited[i] = 1; depth++; dfs(nums, result, depth, temp, visited); depth--; temp.pop_back(); visited[i] = 0; } } } vector<vector<int>> permute(vector<int>& nums) { int depth = 0; vector<int> temp; vector<vector<int>> result; if(nums.size() <= 1) {result.push_back(nums); return result;} int* visited = new int[nums.size()]; for(int i = 0; i < nums.size(); i++) visited[i] = 0; dfs(nums, result, depth, temp, visited); return result; } };