/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/intcmp(constint*a,constint*b){return*(int*)a-*(int*)b;}//定义全局ret保存数据int** ret;int ret_len=0;//定义暂存数组保存遍历元素int* zj;int zj_len=0;//标记使用数组定义int surv[8]={0,0,0,0,0,0,0,0};voiddfs(int* nums,int numsSize,int*returnSize,int** returnColumnSizes){if(zj_len==numsSize){//(回溯)递归出口
ret[*returnSize]=(int*)malloc(sizeof(int)*numsSize);//int和char都可以直接memcpymemcpy(ret[*returnSize],zj,sizeof(int)*zj_len);(*returnColumnSizes)[*returnSize]=numsSize;(*returnSize)++;return;}for(int j=0;j<numsSize;j++){if(surv[j]==1)continue;
surv[j]=1;//将数字所在位置的下标置1下面的递归不在访问
zj[zj_len++]=nums[j];//将数字暂存到暂存数组dfs(nums,numsSize,returnSize,returnColumnSizes);//没到if一直进入dfs
zj_len--;//暂存数组退1位
surv[j]=0;//重新置为0while((j<numsSize-1)&&(nums[j]== nums[j+1])){//剪枝(有序)
j++;if(j == numsSize-1)break;}}}int**permuteUnique(int* nums,int numsSize,int* returnSize,int** returnColumnSizes){//利用qsort对数组进行排序qsort(nums,numsSize,sizeof(int),cmp);//二维数组的定义*returnColumnSizes=(int*)malloc(sizeof(int)*720);//return数组定义
ret=(int**)malloc(sizeof(int*)*720);//暂存数组定义
zj=(int*)malloc(sizeof(int)*numsSize);//*returnSize的初始大小* returnSize=0;dfs(nums,numsSize,returnSize,returnColumnSizes);return ret;}