From cd6218bf955b193dff7d5a12d9e0ddcc96c8c93c Mon Sep 17 00:00:00 2001 From: Arthur Date: Thu, 9 Sep 2021 02:00:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200059.=E8=9E=BA?= =?UTF-8?q?=E6=97=8B=E7=9F=A9=E9=98=B5II.md=20C=E8=AF=AD=E8=A8=80=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0059.螺旋矩阵II.md | 59 +++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/problems/0059.螺旋矩阵II.md b/problems/0059.螺旋矩阵II.md index 3dbc2a50..4abe5f9c 100644 --- a/problems/0059.螺旋矩阵II.md +++ b/problems/0059.螺旋矩阵II.md @@ -468,6 +468,65 @@ class Solution { } ``` +C: +```c +int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){ + //初始化返回的结果数组的大小 + *returnSize = n; + *returnColumnSizes = (int*)malloc(sizeof(int) * n); + //初始化返回结果数组ans + int** ans = (int**)malloc(sizeof(int*) * n); + int i; + for(i = 0; i < n; i++) { + ans[i] = (int*)malloc(sizeof(int) * n); + (*returnColumnSizes)[i] = n; + } + + //设置每次循环的起始位置 + int startX = 0; + int startY = 0; + //设置二维数组的中间值,若n为奇数。需要最后在中间填入数字 + int mid = n / 2; + //循环圈数 + int loop = n / 2; + //偏移数 + int offset = 1; + //当前要添加的元素 + int count = 1; + + while(loop) { + int i = startX; + int j = startY; + //模拟上侧从左到右 + for(; j < startY + n - offset; j++) { + ans[startX][j] = count++; + } + //模拟右侧从上到下 + for(; i < startX + n - offset; i++) { + ans[i][j] = count++; + } + //模拟下侧从右到左 + for(; j > startY; j--) { + ans[i][j] = count++; + } + //模拟左侧从下到上 + for(; i > startX; i--) { + ans[i][j] = count++; + } + //偏移值每次加2 + offset+=2; + //遍历起始位置每次+1 + startX++; + startY++; + loop--; + } + //若n为奇数需要单独给矩阵中间赋值 + if(n%2) + ans[mid][mid] = count; + + return ans; +} +``` ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw) From 0bb0db34997a997ce772595992224f0df0bc08e4 Mon Sep 17 00:00:00 2001 From: Arthur Date: Thu, 9 Sep 2021 18:49:45 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200216.=E7=BB=84?= =?UTF-8?q?=E5=90=88=E6=80=BB=E5=92=8CII.md=20C=E8=AF=AD=E8=A8=80=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0216.组合总和III.md | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/problems/0216.组合总和III.md b/problems/0216.组合总和III.md index 177c6b03..10491553 100644 --- a/problems/0216.组合总和III.md +++ b/problems/0216.组合总和III.md @@ -392,7 +392,63 @@ var combinationSum3 = function(k, n) { }; ``` +C: +```c +int* path; +int pathTop; +int** ans; +int ansTop; +int getPathSum() { + int i; + int sum = 0; + for(i = 0; i < pathTop; i++) { + sum += path[i]; + } + return sum; +} +void backtracking(int targetSum, int k, int sum, int startIndex) { + if(pathTop == k) { + if(sum == targetSum) { + int* tempPath = (int*)malloc(sizeof(int) * k); + int j; + for(j = 0; j < k; j++) + tempPath[j] = path[j]; + ans[ansTop++] = tempPath; + } + // 如果path.size() == k 但sum != targetSum 直接返回 + return; + } + int i; + //从startIndex开始遍历,一直遍历到9 + for (i = startIndex; i <= 9; i++) { + sum += i; // 处理 + path[pathTop++] = i; // 处理 + backtracking(targetSum, k, sum, i + 1); // 注意i+1调整startIndex + sum -= i; // 回溯 + pathTop--;; // 回溯 + } +} + +int** combinationSum3(int k, int n, int* returnSize, int** returnColumnSizes){ + //初始化辅助变量 + path = (int*)malloc(sizeof(int) * k); + ans = (int**)malloc(sizeof(int*) * 20); + pathTop = ansTop = 0; + + backtracking(n, k, 0, 1); + + //设置返回的二维数组中元素个数为ansTop + *returnSize = ansTop; + //设置二维数组中每个元素个数的大小为k + *returnColumnSizes = (int*)malloc(sizeof(int) * ansTop); + int i; + for(i = 0; i < ansTop; i++) { + (*returnColumnSizes)[i] = k; + } + return ans; +} +``` ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)