力扣热题46全排列
要点:第一反应就是从最小得排序开始列出其所有得字典排序,所以以为直接sort+手动冒泡就完事了。上当了,这种遍历所有情况还是要使用回溯法找个标记数组判断不重复就好了。
vector<vector<int>> permute(vector<int>& nums) {
int len=nums.size();
if(len==0) //边界情况
return res;
vector<int > visit(len,0); //标记数组
vector<int> temp;
digui(nums,temp,visit,0,len);
return res;
}
void digui(vector<int> &nums,vector<int> temp,vector<int> visit,int curr,int len)
{
if(curr==len) //插满了某种排列
{
res.push_back(temp);
return;
}
for(int j=0;j<len;j++)
{
if(!visit[j]) //如果该次没有访问过
{
temp.push_back(nums[j]);
visit[j]=1;
digui(nums,temp,visit,curr+1,len); //插下一个位置
visit[j]=0; //结束后删去该位置得状态判断下一个
temp.pop_back();
}
}
}