和爲S的連續正數序列
(今天看這個題把我給看急了,我就覺得應該用回溯,因爲我之前也寫過一個題:組合總和,跟這個題太像了,結果半天沒寫出來,懷着無比難過和沉重的心情看了大家都管他叫左神的大佬的解題思路,我的天,聰明的人的腦子果真跟我長的不一樣,這下更難過了,非得看懂自己寫出來才肯睡覺,默默埋怨一句,我咋就沒有這麼聰明呢)
思路:這個題其實就是一個等差數列的求和問題,大佬的解法是設置一個窗口,通過計算窗口前沿和後沿之間的數的和(題中說數字是連續的,可以看出它是公差爲1的等差數列),當然是根據等差數列的求和公式算得等差數列的和,比sum小,那後沿窗口右移,比它大,前沿窗口後移。當然和sum相等的話就把這個窗口的數全都保存下來。
class Solution
{
public:
vector<vector<int> > FindContinuousSequence(int sum)
{
vector<vector<int>> vv;
int begin=1;
int end=2;
while(begin<end)
{
int cur=(begin+end)*(end-begin+1)/2; //等差數列的求和公式
if(cur==sum)
{
vector<int> v;
for(int i=begin;i<=end;i++)
{
v.push_back(i);
}
vv.push_back(v);
begin++;
}
else if(cur<sum)
end++;
else
begin++;
}
return vv;
}
};