From 8880fb9a657c27304f9ef0a3e6f5d119356d6781 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 1 Oct 2021 15:15:45 +0100 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A00046.=E5=85=A8=E6=8E=92?= =?UTF-8?q?=E5=88=97.md=20C=E8=AF=AD=E8=A8=80=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0046.全排列.md | 66 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/problems/0046.全排列.md b/problems/0046.全排列.md index 001c249e..f41c2509 100644 --- a/problems/0046.全排列.md +++ b/problems/0046.全排列.md @@ -309,6 +309,72 @@ var permute = function(nums) { ``` +C: +```c +int* path; +int pathTop; +int** ans; +int ansTop; + +//将used中元素都设置为0 +void initialize(int* used, int usedLength) { + int i; + for(i = 0; i < usedLength; i++) { + used[i] = 0; + } +} + +//将path中元素拷贝到ans中 +void copy() { + int* tempPath = (int*)malloc(sizeof(int) * pathTop); + int i; + for(i = 0; i < pathTop; i++) { + tempPath[i] = path[i]; + } + ans[ansTop++] = tempPath; +} + +void backTracking(int* nums, int numsSize, int* used) { + //若path中元素个数等于nums元素个数,将nums放入ans中 + if(pathTop == numsSize) { + copy(); + return; + } + int i; + for(i = 0; i < numsSize; i++) { + //若当前下标中元素已使用过,则跳过当前元素 + if(used[i]) + continue; + used[i] = 1; + path[pathTop++] = nums[i]; + backTracking(nums, numsSize, used); + //回溯 + pathTop--; + used[i] = 0; + } +} + +int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){ + //初始化辅助变量 + path = (int*)malloc(sizeof(int) * numsSize); + ans = (int**)malloc(sizeof(int*) * 1000); + int* used = (int*)malloc(sizeof(int) * numsSize); + //将used数组中元素都置0 + initialize(used, numsSize); + ansTop = pathTop = 0; + + backTracking(nums, numsSize, used); + + //设置path和ans数组的长度 + *returnSize = ansTop; + *returnColumnSizes = (int*)malloc(sizeof(int) * ansTop); + int i; + for(i = 0; i < ansTop; i++) { + (*returnColumnSizes)[i] = numsSize; + } + return ans; +} +``` -----------------------