题目:
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
class Solution {
/*
与之前不同,for 循环中就不用 startIndex 了,因为排列问题,每一次都要从头开始搜索
需要用 used 数组来记录 path 中都放了哪些元素
vector 在定义的时候初始化,这个自己也是不太会写的点呢
*/
private:
vector<int> path;
vector<vector<int>> result;
void backtracking(vector<int>& nums, vector<bool>& used)
{
// 终止条件满足的时候, path 中的元素个数 等于 数组本身的长度时,此时说明找到了一组
if(path.size() == nums.size())
{
result.push_back(path);
return;
}
for(int i = 0; i < nums.size(); i++)
{
// path 里已经收录了的元素,直接跳过
if(used[i] == true) continue;
used[i] = true; // used中对应元素更新一下
path.push_back(nums[i]);
backtracking(nums, used);
path.pop_back(); // 回溯
used[i] = false; // 回溯
}
}
public:
vector<vector<int>> permute(vector<int>& nums)
{
result.clear();
path.clear();
vector<bool> used(nums.size(), false);
backtracking(nums, used);
return result;
}
};