/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型一维数组 * @param numLen int num数组长度 * @return int整型二维数组 * @return int* returnSize 返回数组行数 * @return int** returnColumnSizes 返回数组列数 */ #include <stdio.h> #include <malloc.h> void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } void re_permute(int* num, int index, int numLen, int* returnSize, int** returnColumnSizes, int** res) { int i = 0; // 索引到最后一位的时候,将num数组赋值给当前行数组 if(index == numLen) { res[*returnSize] = (int*)malloc(numLen * sizeof(int)); for(int i = 0; i < numLen; i++) { res[*returnSize][i] = num[i]; } (*returnColumnSizes)[*returnSize] = numLen; (*returnSize)++; } for(i = index; i < numLen; i++) { swap(&num[i], &num[index]); if((numLen - index) > 2 && index != i) { swap(&num[i], &num[index + 1]); re_permute(num, index + 1, numLen, returnSize, returnColumnSizes, res); swap(&num[i], &num[index + 1]); } else { re_permute(num, index + 1, numLen, returnSize, returnColumnSizes, res); } swap(&num[i], &num[index]); } } int** permute(int* num, int numLen, int* returnSize, int** returnColumnSizes ) { // write code here if(numLen == 0) {return NULL;} int i = 1; int count = 1; for(; i <= numLen; i++) { count *= i; } *returnColumnSizes = (int*)malloc(count * sizeof(int)); int** res = (int**)malloc(count * sizeof(int*)); *returnSize = 0; re_permute(num, 0, numLen, returnSize, returnColumnSizes, res); return res; }