概述
题目描述:
输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。
分析:
完整代码:
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
//声明一个二位数组容器
vector<vector<int>> data;
//检查输入的合法性
if(sum < 3)
return data;
//声明两个变量,分别表示序列的头部数字和尾部数字
int small = 1;
int big = 2;
//声明一个变量表示总之条件
int middle = (1 + sum) / 2;
//声明一个变量表示当前的序列和
int CurrSum = small + big;
//如果头部数字没有超过 middle
while(small < middle)
{
//如果当前的序列和等于 sum
if( CurrSum == sum)
{
//将两个数字压入到容器中
InsertNum(data, small, big);
}
//如果当前的序列和大于 sum 且 small 小于 middle
while(CurrSum > sum && small < middle)
{
//更新当前的序列和
CurrSum -= small;
small++;//将 small 向后移动
//如果当前的序列和等于 sum
if(CurrSum == sum)
{
//将两个数字间的序列压入到容器中
InsertNum(data, small, big);
}
}
//如果当前的序列和小于 sum
big++;//big 往后移动
CurrSum += big;
}
return data;
}
private:
//将两个数字间的序列压入到容器中
void InsertNum(vector<vector<int>> &data, int small, int big)
{
//声明一个容器
vector<int> array;
//遍历两个数字之间的序列
for(int i = small; i <= big; i++)
{
//将两个数字之间的数字压入到容器
array.push_back(i);
}
data.push_back(array);
}
};
最后
以上就是震动发卡为你收集整理的剑指Offer(牛客版)--面试题57(2): 和为 s 的连续正整数序列的全部内容,希望文章能够帮你解决剑指Offer(牛客版)--面试题57(2): 和为 s 的连续正整数序列所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复