您的位置:首页 > 其它

和为S的连续正数序列

2018-03-20 17:38 225 查看


题目描述

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

输出描述:

输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序


分析:我的思路是利用n(n+1)/2-m(m+1)/2=sum来做,因为至少要两个数,所以m只需要从0枚举到sum/2就可以。不过剑指offer提供了另一种思路,就是从1开始累加,等于sum就存下来,小于sum就继续往后加大的数,大于sum就从前面把小的减掉就ok了。
我的代码:
class Solution {

public:

    vector<vector<int> > FindContinuousSequence(int sum) {

        vector<vector<int> > res;

        int temp,n,j=0,k;

        if(sum<1)

            return res;

        for(int i=0;i<=sum/2;i++){

            temp=2*sum+i*(i+1);

            n=hasN(temp);

            if(n!=-1&&(n-i)>1){

                res.resize(j+1);

                for(k=i+1;k<=n;k++)

                    res[j].push_back(k);

                j++;

            }

        }

        return res;

    }

    int hasN(int number){

        int n=(int)sqrt(number);

        if(n*(n+1)==number)

            return n;

        return -1;

    }

};

剑指offer思路的代码:
链接:https://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe

来源:牛客网
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: