// Source : https://leetcode.cn/problems/permutations/
// Date : 2022-6-5
class Solution {
public:
void backtrack(vector> &res, vector output, int first, int len)
{
// 如果当前已经到了叶子节点,说明所有的数字均被放入,需要回溯了
if(first == len)
{
res.push_back(output);
return;
}
for(int i = first;i < len;++i)
{
// 数字交换
swap(output[i], output[first]);
// 递归放入下一个数字
backtrack(res, output, first + 1, len);
// 因为要返回上一层节点,因此需要将开始的操作进行撤销
swap(output[i], output[first]);
}
}
vector> permute(vector& nums)
{
vector> res;
backtrack(res, nums, 0, nums.size());
return res;
}
};



