From d39a7287a21e3c733bc84ac32faae19748fa9424 Mon Sep 17 00:00:00 2001 From: ArthurP Date: Mon, 27 Sep 2021 20:02:02 +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=20C=E8=AF=AD=E8=A8=80=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0491.递增子序列.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/problems/0491.递增子序列.md b/problems/0491.递增子序列.md index 82e768e7..9f61ae45 100644 --- a/problems/0491.递增子序列.md +++ b/problems/0491.递增子序列.md @@ -320,6 +320,7 @@ int pathTop; int** ans; int ansTop; int* length; +//将当前path中的内容复制到ans中 void copy() { int* tempPath = (int*)malloc(sizeof(int) * pathTop); memcpy(tempPath, path, pathTop * sizeof(int)); @@ -327,6 +328,7 @@ void copy() { ans[ansTop++] = tempPath; } +//查找uset中是否存在值为key的元素 int find(int* uset, int usetSize, int key) { int i; for(i = 0; i < usetSize; i++) { @@ -337,6 +339,7 @@ int find(int* uset, int usetSize, int key) { } void backTracking(int* nums, int numsSize, int startIndex) { + //当path中元素大于1个时,将path拷贝到ans中 if(pathTop > 1) { copy(); } @@ -344,16 +347,21 @@ void backTracking(int* nums, int numsSize, int startIndex) { int usetTop = 0; int i; for(i = startIndex; i < numsSize; i++) { + //若当前元素小于path中最后一位元素 || 在树的同一层找到了相同的元素,则continue if((pathTop > 0 && nums[i] < path[pathTop - 1]) || find(uset, usetTop, nums[i])) continue; + //将当前元素放入uset uset[usetTop++] = nums[i]; + //将当前元素放入path 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); @@ -361,6 +369,7 @@ int** findSubsequences(int* nums, int numsSize, int* returnSize, int** returnCol backTracking(nums, numsSize, 0); + //设置数组中返回元素个数,以及每个一维数组的长度 *returnSize = ansTop; *returnColumnSizes = (int*)malloc(sizeof(int) * ansTop); int i;