一、题目
二、思路
思路1:穷举法,两层for循环遍历,第一层只需要小于等于sum/2
思路2:滑动窗口法
思路3:求和公式+循环
三、思路一代码
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<int>res;
vector<vector<int>>Output;
int Count=0;
int pos=0;
for(int i=1;i<=sum/2;++i)
{
Count=i;
for(int j=i+1;j<sum;++j)
{
Count+=j;
if(Count==sum)
{
for(int k=i;k<=j;++k)
{
res.emplace_back(k);
}
Output.emplace_back(res);
res.clear();
Count=0;
break;
}
else if(Count>sum)
{
break;
}
}
}
return Output;
}
};
四、思路二代码
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int>> ret;
int l=1;int r=1;
int ans=0;
while(l<=sum/2 && l<=r)
{
if(ans<sum)
{
ans+=r;
r++;
}
else if(ans==sum)
{
vector<int>temp;
for(int i=l;i<r;++i)
{
temp.emplace_back(i);
}
ret.emplace_back(temp);
ans-=l;
l++;
}
else
{
ans-=l;
l++;
}
}
return ret;
}
};
五、思路三代码
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int>> ret;
int l=1;int r=l+1;
int ans=0;
while(l<=sum/2 && l<=r)
{
ans=(l+r)*(r-l+1)/2;
if(ans==sum)
{
vector<int>tmp;
for(int i=l;i<=r;++i)
{
tmp.emplace_back(i);
}
ret.emplace_back(tmp);
l++;
}
else if(ans>sum)
{
l++;
}
else
{
r++;
}
}
return ret;
}
};