题目
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
题目解读
dfs+回溯。设置一个记录是否已经访问过的数组visited,也是常见的一种方式。
题目代码
class Solution
{
public:
vector<vector<int>> ans;
vector<int> visited;
void dfs(int length, vector<int> &nums, vector<int> &curr)
{
if (curr.size() == length)
{
ans.push_back(curr);
return;
}
for (int i = 0; i < length; i++)
{
if (visited[i] == 0)
{
visited[i] = 1;
curr.push_back(nums[i]);
dfs(length, nums, curr);
curr.pop_back();
visited[i] = 0;
}
}
}
vector<vector<int>> permute(vector<int> &nums)
{
vector<int> curr;
int length = nums.size();
if (!nums.empty())
{
for (int i = 0; i < length; i++)
{
visited.push_back(0);
}
dfs(length, nums, curr);
}
return ans;
}
};