From b5a1b4663cdbb869c77d4d7269cb759cea739a2c Mon Sep 17 00:00:00 2001 From: ArthurP Date: Mon, 27 Sep 2021 19:59:46 +0100 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200491.=E9=80=92=E5=A2=9E?= =?UTF-8?q?=E5=AD=90=E5=BA=8F=E5=88=97.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0491.递增子序列.md | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/problems/0491.递增子序列.md b/problems/0491.递增子序列.md index ea113f4b..82e768e7 100644 --- a/problems/0491.递增子序列.md +++ b/problems/0491.递增子序列.md @@ -313,7 +313,63 @@ var findSubsequences = function(nums) { ``` +C: +```c +int* path; +int pathTop; +int** ans; +int ansTop; +int* length; +void copy() { + int* tempPath = (int*)malloc(sizeof(int) * pathTop); + memcpy(tempPath, path, pathTop * sizeof(int)); + length[ansTop] = pathTop; + ans[ansTop++] = tempPath; +} +int find(int* uset, int usetSize, int key) { + int i; + for(i = 0; i < usetSize; i++) { + if(uset[i] == key) + return 1; + } + return 0; +} + +void backTracking(int* nums, int numsSize, int startIndex) { + if(pathTop > 1) { + copy(); + } + int* uset = (int*)malloc(sizeof(int) * numsSize); + int usetTop = 0; + int i; + for(i = startIndex; i < numsSize; i++) { + if((pathTop > 0 && nums[i] < path[pathTop - 1]) || find(uset, usetTop, nums[i])) + continue; + uset[usetTop++] = nums[i]; + path[pathTop++] = nums[i]; + backTracking(nums, numsSize, i + 1); + pathTop--; + } +} + +int** findSubsequences(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){ + path = (int*)malloc(sizeof(int) * numsSize); + ans = (int**)malloc(sizeof(int*) * 33000); + length = (int*)malloc(sizeof(int*) * 33000); + pathTop = ansTop = 0; + + backTracking(nums, numsSize, 0); + + *returnSize = ansTop; + *returnColumnSizes = (int*)malloc(sizeof(int) * ansTop); + int i; + for(i = 0; i < ansTop; i++) { + (*returnColumnSizes)[i] = length[i]; + } + return ans; +} +``` -----------------------