void dfs(int top,int numsSize,int** result,int*returnSize,int*temp,int** returnColumnSizes,int startIndex,int* nums){
if(top==numsSize){//本轮收集的数组内元素数量达标,则收割结果
result[*returnSize]=malloc(sizeof(int)*top);
for(int i=0;i<top;i++){
result[*returnSize][i]=temp[i];
}
(*returnColumnSizes)[(*returnSize)++]=top;
return;
}
int symbol=0;//标志,用来判断temp数组之前的元素有没有跟nums[i]重复
for(int i=startIndex;i<numsSize;i++){
for(int j=0;j<top;j++){//遍历判断有无重复
if(temp[j]==nums[i]){
symbol=1;
break;
}
}
if(symbol==0){
temp[top]=nums[i];
dfs(top+1,numsSize,result,returnSize,temp,returnColumnSizes,0,nums);
//因为这里的startindex从0开始,所以也可以不设这个参数,每轮直接从0开始
//因为从0开始,所以可能出现 111,112 这种元素重复收集的情况,因此前面需要遍历判断
}else{//重复的话,则重置标志位,跳过此次循环
symbol=0;
continue;
}
}
}
int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
int** result=malloc(sizeof(int)*2000);
(*returnSize)=0;
(*returnColumnSizes)=malloc(sizeof(int)*2000);
int* temp=malloc(sizeof(int)*21);
dfs(0,numsSize,result,returnSize,temp,returnColumnSizes,0,nums);
return result;
}
06-18
203
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
05-29
831
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-12
603
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
11-20
328
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-13
816
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-27