原题链接:46.全排列
思路:
主要是和组合的区别,排列是可以从头使用元素
但是依旧是不允许有重复元素使用,所以依旧是需要进行去重
全代码:
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
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++)
{//因为是每次都要从头开始排,所以不需要startIndex
if(used[i] == true) continue; //如果本层之前的元素使用过,则跳过循环
used[i] = true;//记录该元素已被使用
path.push_back(nums[i]);//将nums[i] push进path中
backtracking(nums,used); //进入递归
used[i] = false; //回溯
path.pop_back(); //回溯
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<bool> used(nums.size(),false);
backtracking(nums,used);
return result;
}
};