本题属于全排列的题,类似与leetcode 17,使用递归即可,使用一个数组用来表示nums的元素是否已使用,0表示没使用 1表示已使用
void perM(std::vector<std::vector<int>> &a,std::vector<int> &b,std::vector<int>&nums,std::vector<int>&v,int number,int len){
if(len+1==number){
a.push_back(v);
return;
}
else {
for(int i=0;i<=len;i++) {
if (b[i] == 0) {
v.push_back(nums[i]);
number++;
b[i]=1;
perM(a,b,nums,v,number,len);
b[i]=0;
number--;
v.pop_back();
}
}
}
}
std::vector<std::vector<int>> permute(std::vector<int>& nums) {
std::vector<std::vector<int>> a;
int len=nums.size();
std::vector<int> ch;
for(int i=0;i<nums.size();i++){
ch.push_back(0);
}
std::vector<int> v;
if(len==0)
return a;
else
perM(a,ch,nums,v,0,len-1);
return a;
}