既然是数学问题,那么就用数学的方法来解决(笑)
无非就是一个等差数列求和的问题
等差数列求和公式:
其中:
代入可得: 并且
满足正数的条件,所以
可得:
算法复杂度:
接下来就可以愉快地写代码啦:
function FindContinuousSequence(sum)
{
const res = [];
if(sum <= 0) return res;
let n=2, x0, each;
while(n**2 + n <= 2*sum){
x0 = (2*sum + n - n**2) / (2*n);
if(Math.floor(x0) === x0){
each = [];
for(let i=0; i<n; ++i) each.push(x0+i);
res.push(each);
}
++n;
}
return res.sort((a, b) => a[0]-b[0]);
}
京公网安备 11010502036488号