Leetcode 46. 全排列
题目
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
思路
- 递归参数:nums,used(标记元素是否使用过,同一树枝下的元素不可以重复,也就是Path中的元素不可以重复)
- 递归终止条件:path.size() = nums.size()说明找到了一个组合
- 单层递归逻辑:for循环nums,先判断nums[i]是否已经使用过,然后将nums[i]送入path,递归i+1,回溯
代码
class Solution {
public:
vector<int> path;
vector<vector<int>> result;
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;// 该元素Path使用过 直接跳过
}
// 没有使用过 标记使用过
used[i] = true;
path.push_back(nums[i]);
backTracking(nums,used);
used[i] = false;
path.pop_back();
}
}
vector<vector<int>> permute(vector<int>& nums) {
result.clear();
path.clear();
vector<bool> used(nums.size(),false);
backTracking(nums,used);
return result;
}
};