回溯算法:全排列问题
思路:利用一个数组进行去重
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
vector<int> use;
vector<vector<int>> permute(vector<int>& nums) {
int step = 0;
use.assign(nums.size(), 0);
backtrack(nums, step);
return res;
}
void backtrack(vector<int>& nums, int step)
{
if(step == nums.size())
{
res.push_back(path);
return;
}
for(int i = 0; i < nums.size(); i++)
{
//相同则跳过
if(use[i] == 1)
{
continue;
}
//递归下一层
use[i] = 1;
step++;
path.push_back(nums[i]);
backtrack(nums,step);
//回溯
step--;
use[i] = 0;
path.pop_back();
}
}
};