和为S的连续正数序列
题目描述
输入一个正数, 打印出和为s的连续正数序列(至少含有两个数). 例如, 输入15, 由于1+2+3+4+5=4+5+6=7+8=15, 所以打印出3个连续序列1~5, 4~6, 7~8
使用两个游标left和right, left始终小于(sum+1)/2, 若当前和小于sum, 则右侧游标下移一位; 若当前和大于sum则左侧游标下移一位, 与此同时right游标更新为left游标的下一位
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int>> ret;
if (2 > sum) {
return ret;
}
int left = 1;
int right = left + 1;
while (left < ((sum + 1) / 2)) {
int num = right - left + 1;
// 当前的和
int currentSum = (left + right) * num / 2;
// 和相等
if (sum == currentSum) {
vector<int> temp; // temp在这里声明下面temp.resize()可注释掉
for (int i = left; i <= right; i++) {
temp.push_back(i);
}
ret.push_back(temp);
//temp.resize(0);
left += 1;
right = left + 1;
//continue;
}
// 和大于sum
else if (sum < currentSum) {
left += 1;
right = left + 1;
//continue;
}
else {
// 和小于sum, 右边界+1
right++;
}
}
return ret;
}
};
插一句没用的, 牛客上卖萌的题目描述终于没了