Skip to content

Commit 8631472

Browse files
Merge pull request youngyangyang04#704 from KingArthur0205/remote
添加 0077.组合优化.md C语言版本、添加 0977.有序数组的平方.md C语言版本
2 parents f1b2279 + b56fa24 commit 8631472

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

problems/0077.组合优化.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,59 @@ var combine = function(n, k) {
242242
};
243243
```
244244

245+
C:
246+
```c
247+
int* path;
248+
int pathTop;
249+
int** ans;
250+
int ansTop;
251+
252+
void backtracking(int n, int k,int startIndex) {
253+
//当path中元素个数为k个时,我们需要将path数组放入ans二维数组中
254+
if(pathTop == k) {
255+
//path数组为我们动态申请,若直接将其地址放入二维数组,path数组中的值会随着我们回溯而逐渐变化
256+
//因此创建新的数组存储path中的值
257+
int* temp = (int*)malloc(sizeof(int) * k);
258+
int i;
259+
for(i = 0; i < k; i++) {
260+
temp[i] = path[i];
261+
}
262+
ans[ansTop++] = temp;
263+
return ;
264+
}
265+
266+
int j;
267+
for(j = startIndex; j <= n- (k - pathTop) + 1;j++) {
268+
//将当前结点放入path数组
269+
path[pathTop++] = j;
270+
//进行递归
271+
backtracking(n, k, j + 1);
272+
//进行回溯,将数组最上层结点弹出
273+
pathTop--;
274+
}
275+
}
245276

277+
int** combine(int n, int k, int* returnSize, int** returnColumnSizes){
278+
//path数组存储符合条件的结果
279+
path = (int*)malloc(sizeof(int) * k);
280+
//ans二维数组存储符合条件的结果数组的集合。(数组足够大,避免极端情况)
281+
ans = (int**)malloc(sizeof(int*) * 10000);
282+
pathTop = ansTop = 0;
246283

284+
//回溯算法
285+
backtracking(n, k, 1);
286+
//最后的返回大小为ans数组大小
287+
*returnSize = ansTop;
288+
//returnColumnSizes数组存储ans二维数组对应下标中一维数组的长度(都为k)
289+
*returnColumnSizes = (int*)malloc(sizeof(int) *(*returnSize));
290+
int i;
291+
for(i = 0; i < *returnSize; i++) {
292+
(*returnColumnSizes)[i] = k;
293+
}
294+
//返回ans二维数组
295+
return ans;
296+
}
297+
```
247298
248299
-----------------------
249300
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)

problems/0977.有序数组的平方.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,40 @@ def sorted_squares(nums)
270270
end
271271
```
272272

273+
274+
C:
275+
```c
276+
int* sortedSquares(int* nums, int numsSize, int* returnSize){
277+
//返回的数组大小就是原数组大小
278+
*returnSize = numsSize;
279+
//创建两个指针,right指向数组最后一位元素,left指向数组第一位元素
280+
int right = numsSize - 1;
281+
int left = 0;
282+
283+
//最后要返回的结果数组
284+
int* ans = (int*)malloc(sizeof(int) * numsSize);
285+
int index;
286+
for(index = numsSize - 1; index >= 0; index--) {
287+
//左指针指向元素的平方
288+
int lSquare = nums[left] * nums[left];
289+
//右指针指向元素的平方
290+
int rSquare = nums[right] * nums[right];
291+
//若左指针指向元素平方比右指针指向元素平方大,将左指针指向元素平方放入结果数组。左指针右移一位
292+
if(lSquare > rSquare) {
293+
ans[index] = lSquare;
294+
left++;
295+
}
296+
//若右指针指向元素平方比左指针指向元素平方大,将右指针指向元素平方放入结果数组。右指针左移一位
297+
else {
298+
ans[index] = rSquare;
299+
right--;
300+
}
301+
}
302+
//返回结果数组
303+
return ans;
304+
}
305+
```
306+
273307
PHP:
274308
```php
275309
class Solution {
@@ -300,6 +334,7 @@ class Solution {
300334
```
301335

302336

337+
303338
-----------------------
304339
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
305340
* B站视频:[代码随想录](https://space.bilibili.com/525438321)

0 commit comments

Comments
 (0)