给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
cpp
//抄的
class Solution {
private:
vector<vector<int>>result;
vector<int> path;
public:
void backtracking(vector<int>& nums,vector<bool>&used)
{
if(path.size()==nums.size())
{
result.push_back(path);
return;
}
for(int i=0;i<nums.size();i++)
{
if (used[i] == true) continue;
used[i] = true;
path.push_back(nums[i]);
backtracking(nums, used);
path.pop_back();
used[i] = false;
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<bool>used(nums.size(), false);
backtracking(nums,used);
return result;
}
};
回溯算法
主要还是依托于递归,再递归中循环判断,实现多层的穷举
这里传递一个bool数组used用于判断在此次枚举中数字是否用过,终止条件是当前记录的路径长度是否等于原数组长度,回溯处理需要弹出path末尾元素并重置used对应元素。