leetcode——15.3Sum

来源:互联网 发布:米特网域名怎么解析 编辑:程序博客网 时间:2024/06/05 11:25
#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;}