leetcode——15.3Sum

xiaoxiao2021-02-28  68

#include<stdio.h> #include<stdlib.h> int** threeSum(int* nums, int numsSize, int* returnSize) { if (numsSize<3) return NULL; int comNum = numsSize*(numsSize - 1)*(numsSize - 2) / 6; int** ret = (int**)malloc(sizeof(int*)*comNum);//先创建“用来存储一堆指针的”空间 int** tmp = ret; int realcomNum = 0; for (int i = 0; i < numsSize - 2; i++) { for (int j = i+1; j < numsSize - 1; j++) { for (int k = j+1; k < numsSize; k++) { if (0 == nums[i] + nums[j] + nums[k]) { *tmp = (int *)malloc(sizeof(int) * 3);//再把里面的指针,指向所分配空间 *(*(tmp)) = nums[i]; *(*(tmp)+1) = nums[j]; *(*(tmp)+2) = nums[k]; tmp = tmp + 1; realcomNum = realcomNum + 1; } } } } //注意这里面的写法,很有借鉴意义。对二级指针的运用很有启发,而且可以扩展到更高级指针。 int** retReal = (int **)malloc(sizeof(int*)*realcomNum); for (int h = 0; h<realcomNum; h++) { retReal[h] = tmp[h];//这里写成ret[h]才行 } free(ret); *returnSize = realcomNum; return retReal; } int main(void)//这份代码并不能完成题目要求的不能重复的要求。只是熟悉指针操作而已。 { int array[] = { 1,0,0,0,-1}; int comnum=0; int** p = NULL; p = threeSum(array, sizeof(array) / sizeof(array[0]), &comnum); printf("共有%d个组合:\n",comnum); for (int n = 0; n <comnum; n++) { printf("[%d,%d,%d]\n", *(p[n]+0), *(p[n] + 1), *(p[n] + 2)); free(p[n]); } free(p); p = NULL; getchar(); return 0; }
转载请注明原文地址: https://www.6miu.com/read-31156.html

最新回复(0)