个人思路总结:
这是一道经典的回溯算法题,可以用递归来实现。
其实很多人在写递归算法时,总会纠结于每一步递归都是怎么实现的,这样往往容易把自己绕晕。我们只需要关注三件事即可:终止条件、这一步你该做什么以及返回值
代码如下:
class Solution {
public:
vector<vector<int>> result;
vector<vector<int>> permute(vector<int>& nums) {
dfs(nums,0);
return result;
}
void dfs(vector<int>& nums, int begin)
{
if(begin==nums.size())
{
result.push_back(nums);
return;
}
for(int i=begin;i<nums.size();i++)
{
swap(nums[i],nums[begin]); //即每一个元素在每一个位置都有可能存在过
dfs(nums,begin+1);
swap(nums[i],nums[begin]); //一定要记得换回来,负责不能保证每个元素在每一个位置都出现过
}
}
};