题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
考察点:具体例子;知识迁移。
思路:设置两个下标small和big,从头到位加和判断。相应移动。
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum)
{
vector<vector<int>> result;
int small = 1;
int big = 2;//初始化
int mid = (1 + sum) / 2;//因为至少是两个数,所以最小的那个数不能超过中值
int currentSum = small + big;//记录当前和
while (small < mid)//small 不可能超过mid
{
vector<int> re;
if (currentSum == sum)//相等的话,依次入数组
{
for (int i = small; i <= big; i++)
{
re.push_back(i);
}
result.push_back(re);//加入二维数组
}
re.clear();//清空数组
if (currentSum > sum)//如果大的话,直接small增加用于删减元素
{
currentSum -= small;
small++;
}
else //如果小的话,直接big增加用于增加元素
{
big++;
currentSum += big;
}
}
return result;
}
};