依据给定的int型数组,给出全排列

比方:
[1,2] => [[1,2],[2,1]
[1,2,3] =>[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

#include <stdio.h>#include <stdlib.h>int *concat(int* list, int length, int x) {    int *result = (int*)malloc((length + 1) * sizeof(int));    for (int i = length; i > 0; i--) {        result[i] = list[i - 1];    }    result[0] = x;    return result;}int getFactorial(int n) {    int total = 1;    for (int i = 1; i <= n; i++) {        total *= i;    }    return total;}int** getPermutation(int * list ,int n) {    int** result;    int total = getFactorial(n);    if (n == 2) {        result = (int**)malloc(total * sizeof(int*));        for (int i = 0; i < total; i++) {            result[i] = (int*)malloc(n * sizeof(int));        }        result[0][0] = list[0];        result[0][1] = list[1];        result[1][0] = list[1];        result[1][1] = list[0];        return result;    }else{        result = (int**)malloc(total * sizeof(int*));        for (int i = 0; i < n; i++) {            int* tempList = (int*)malloc((n - 1) * sizeof(int));            int curIdx = 0;            for (int j = 0; j < n; j++) {                if (i == j) continue;                tempList[curIdx] = list[j];                curIdx++;            }            int** tempResult = getPermutation(tempList, n - 1);            int tempResultLength = getFactorial(n - 1);            for (int k = 0; k < tempResultLength; k++) {                result[tempResultLength * i + k] = concat(tempResult[k], n - 1, list[i]);                }            free(tempList);            free(tempResult);        }        return result;    }}int main() {    int n =4;    int* p = (int*)malloc(n * sizeof(int));    for (int i = 0; i < n; i++) {        p[i] = i + 1;    }        int **result = getPermutation(p,n);    for (int i = 0; i < getFactorial(n); i++) {        for (int j = 0; j < n; j++) {            printf("%d,", result[i][j]);        }        printf("\n");    }    free(p);    free(result);    return 0;}