题解 | #和为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;
}

全部评论

相关推荐

穿件外套出门:这简历一眼太水了,前面有的没的直接删,写项目亮点
点赞 评论 收藏
分享
02-17 20:43
西北大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务