题解 | #和为S的连续正数序列#
和为S的连续正数序列
https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param sum int整型 * @return int整型二维数组 * @return int* returnSize 返回数组行数 * @return int** returnColumnSizes 返回数组列数 */ #include <stdlib.h> int** FindContinuousSequence(int sum, int* returnSize, int** returnColumnSizes ) { // write code here if(sum <= 1){ *returnSize = 0; return NULL; } int** retArr = (int**)malloc(sizeof(int*)*15); //为返回数组申请空间 *returnColumnSizes = (int*)malloc(sizeof(int)*15); //为返回数组列数申请空间,一般传入一个指针,因此需要malloc分配空间 *returnSize = 0; //初始化返回数组行数 int tmpSum; //临时总和 for(int i=1; i<=100; i++){ //从[1-100]作为起始,逐项相加 tmpSum = 0; if(i>=sum)break; //剪枝,如果起始值大于sum,退出 for(int j=i; j<=100; j++){ //从i的开始,相加 tmpSum += j; if(tmpSum > sum) //如果超出,直接退出进入下一次遍历 break; else if(tmpSum == sum){ //相等则将[i-j]的数存储到返回数组中 (*returnColumnSizes)[(*returnSize)] = j-i+1; //赋值返回数组列数的长度 retArr[(*returnSize)] = (int*)malloc(sizeof(int)*((*returnColumnSizes)[(*returnSize)])); //为本次结果动态申请空间 for(int k=i; k<=j; k++) //[i-j]逐项赋值到申请的空间 retArr[(*returnSize)][k-i] = k; (*returnSize)++; //返回数组行数+1 break; } } } return retArr; }