给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
解题思路:回溯法
输入n个数对应的全排列个数为n!,考虑dfs求解,分别以数组中的每个数作为排列的起始位置,一定要注意一点:通过设置条件去掉那些无用的分支,本题的条件就是当某个数字已经存在于数组的时候就不再添加它,即中间输出数组中不存在重复数字!
具体代码:
class Solution {
public:
void dfs46(vector<int>& nums, int idx, vector<int>& oneresult, vector<vector<int>>&result)
{
if (idx == nums.size())
{
result.push_back(oneresult);
return;
}
for (int i = 0; i < nums.size(); ++i)
{
if (find(oneresult.begin(), oneresult.end(), nums[i]) == oneresult.end())
{
oneresult.push_back(nums[i]);
dfs46(nums, idx + 1, oneresult, result);
oneresult.pop_back();
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> result;
vector<int> oneresult;
dfs46(nums, 0, oneresult, result);
return result;
}
};