Given a collection of distinct integers, return all possible permutations.
Example:
Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
考察:回溯法
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int> > res;
vector<int> out;
vector<bool> visited(nums.size(), false);
permuteDFS(nums, 0, out, visited, res);
return res;
}
void permuteDFS(vector<int> &nums, int level, vector<int> &out, vector<bool> &visited, vector<vector<int>> &res) {
if (level == nums.size())
res.push_back(out);
else {
for (int i = 0; i < nums.size(); i ++) {
if (visited[i] == false) {
visited[i] = true;
out.push_back(nums[i]);
permuteDFS(nums, level+1, out, visited, res);
visited[i] = false;
out.pop_back();
}
}
}
}
};