比较经典的回溯算法,用了之后记得要标记出来。标记后下一轮记得重置
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
if(nums.empty())
return res;
int n=nums.size();
vector<int> out;
bool *used=new bool[n];
memset(used,0,n);
shengcheng(res,nums,out,used,n);
delete[] used;
return res;
}
void shengcheng(vector<vector<int>>&res,vector<int>& nums,vector<int>&out,bool *used,int total)
{
if(out.size()==total)
{
res.push_back(out);
//out.pop_back();
}
for(int i=0;i<total;++i)
{
if(!used[i])
{
out.push_back(nums[i]);
used[i]=true;
shengcheng(res,nums,out,used,total);
used[i]=false;
out.pop_back();
}
}
}
};