我是靠谱客的博主 迷人柜子,最近开发中收集的这篇文章主要介绍和为s的连续正数序列(剑指offer)---C语言,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例 1:

输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:

输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

限制:

1 <= target <= 10^5

/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** findContinuousSequence(int target, int* returnSize, int** returnColumnSizes)
{
    //returnsize  表示的是  二维数组中一维数组的个数
    //returncolumsizes 表示的是其中二维数组中一维数组中的元素个数,也就是列宽

    int **res = (int**)malloc(sizeof(int*)*target);
    *returnColumnSizes = malloc(sizeof(int)*target);

    int i = 0;
    int j = 0;
    int right = 0;
    int row = 0;
    int col = 0;
    int sum = 0;
    int size = 0;
    for(i = 1; i < target; ++i)
    {
        right = i;
        sum = i;

        while(sum < target)
        {
            right++;
            sum += right;
        }
        if(sum == target)
        {
            col = 0;
            size = right - i + 1;
            (*returnColumnSizes)[row] = size;
            res[row] = (int*)malloc(sizeof(int)*size);
            for(j = i; j <= right; ++j)
            {
                res[row][col] = j;
                col++;
            }
            row++;
        }
    }
    *returnSize = row;
    return res;
}

//暴力解法,时空复杂度高,胜在容易理解

最后

以上就是迷人柜子为你收集整理的和为s的连续正数序列(剑指offer)---C语言的全部内容,希望文章能够帮你解决和为s的连续正数序列(剑指offer)---C语言所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部