File tree Expand file tree Collapse file tree 2 files changed +86
-0
lines changed Expand file tree Collapse file tree 2 files changed +86
-0
lines changed Original file line number Diff line number Diff line change @@ -242,8 +242,59 @@ var combine = function(n, k) {
242
242
};
243
243
```
244
244
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
+ }
245
276
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;
246
283
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
+ ```
247
298
248
299
-----------------------
249
300
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
Original file line number Diff line number Diff line change @@ -270,6 +270,40 @@ def sorted_squares(nums)
270
270
end
271
271
```
272
272
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
+
273
307
PHP:
274
308
```php
275
309
class Solution {
@@ -300,6 +334,7 @@ class Solution {
300
334
```
301
335
302
336
337
+
303
338
-----------------------
304
339
* 作者微信:[ 程序员Carl] ( https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw )
305
340
* B站视频:[ 代码随想录] ( https://space.bilibili.com/525438321 )
You can’t perform that action at this time.
0 commit comments