题目
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]
]
分析
这个问题算是DFS,深度优先遍历。
类似的问题还有Permutation II,Next Permutaion
实现
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
//保留最终结果
vector<vector<int>> result;
if (nums.size() == 0)
return result;
//标记是否被使用过
vector<bool> tag(nums.size(),false);
//保存当前的结果
vector<int> tmp;
helper(result, nums, tag, tmp);
return result;
}
void helper(vector<vector<int>>&result, vector<int>& nums, vector<bool>& tag, vector<int> & v)
{
//如果vector填够了n个数字,则返回,出栈
if (v.size() == nums.size())
{
result.push_back(v);
return;
}
for (int i = 0; i < nums.size(); i++)
{
//判断当前数字是否被使用过,使用过的话就跳过
if (!tag[i])
{
v.push_back(nums[i]);
tag[i] = true;
helper(result, nums, tag, v);
v.pop_back();
tag[i] = false;
}
}
}
};