CodingInterview-和为S的连续正数序列

思路比较简单,数列上有两个指针,如果指针内的数的和比 sum 小,那么就右移右边指针让和变大,否则就右移左边指针让和变小。这样,就能按照一个方向一直找到所有可能的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int>> result;
if(sum<3) return result;
int small=1,big=2,add=3;
while(small<=sum/2){
if(add<sum) add+=++big;
else if(add>sum) add-=small++;
else{
this->addSequence(small,big,&result);
add+=++big;
}
}
return result;
}
void addSequence(int small,int big,vector<vector<int>>* result){
vector<int> seq;
for(int i=small;i<=big;i++){
seq.push_back(i);
}
result->push_back(seq);
}
};