和为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
来源:牛客网
相关文章推荐
- 找出所有和为S的连续正数序列
- 和为n 连续正数序列
- 面试题41 和为S的连续正数序列
- 输入一个正数 n,输出所有和为n 连续正数序列。
- 【追求进步】和为S的连续正数序列
- 和为n的连续正数序列
- 程序员面试题100题第26题——和为n连续正数序列
- 《剑指Offer》学习笔记--面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer:和为S的连续正数序列
- 和为S的两个数字 & 和为S的连续正数序列
- 和为S的连续正数序列
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 【算法11】和为n的连续正数序列
- 和为S的连续正数序列
- 和为S的连续正数序列
- 和为定值的两个、三个、多个、连续正数序列
- 剑指Offer:和为s的两个数字VS和为s的连续正数序列
- 递增数列中和为s的两个数字,和为s的连续正数序列
- 和为S的连续正数序列
- 和为S的连续正数序列:双指针同向(非相向)逼近