
思路
-
连续正数序列什么意思?
就是递增等差数列,像1,2,3,4,5,6,7,8,9这样的。 -
输入
sum查找的范围就在1~sum-1的正数序列里找,如输入9结果就在[1,2,3,4,5,6,7,8]。 -
假如把
sum值也放在查找范围会怎么样?
如输入3,查找范围变成[1,2,3],1+2+3 = 6,2+3=5,那3=3就对了?错,至少包含两个数。 -
结果是二维数组
arr,那么每一组解法是一维数组_itemarr -
利用循环,将每一项进行
求和得出值_sum,并将每一项放进解法数组_itemarr,对求的和_sum与sum进行比较。
- 如果
_sum和sum相等,说明已经找到一组解法了,需要把解法_itemarr放进结果arr。然后就是从解法第一个元素的下一个重新开始枚举。如[2,3,4]是符合要求的,令i = 2,循环下次就是从3开始求解,像这样[3,4,5,...]。 - 如果
_sum大于sum,就可以直接从下一个重新开始枚举了。 - 循环完所有的结果都找到了。
代码
function FindContinuousSequence(sum)
{
let _sum = 0, // 每一组和
_itemarr = [],// 每一组的元素
arr = []; // 总的结果
for (let i = 1; i < sum; i++) {
_sum += i // 每一组解法求和
_itemarr.push(i) //每一项放进解法数组_itemarr
if (_sum === sum) {
i = _itemarr[0] // 从第一个的下一个位置开始,即(i++),如[2,3,4]是符合要求的,i = 2,下次就是3开始
arr.push(_itemarr) // 把这一组结果先放进结果
//重置每一组
_sum = 0
_itemarr = []
} else if (_sum > sum) {
i = _itemarr[0] // 从第一个的下一个位置开始,即(i++),如[1,2,3,4]是大于要求的, i = 1,下次就是2开始
//重置每一组
_sum = 0
_itemarr = []
}
}
return arr
}
本文解析如何使用循环算法在给定范围内查找满足和等于输入sum的连续正整数序列。通过实例演示了解查找策略,包括递推求和与数组操作,适用于前端、后端开发者和数据结构爱好者。
852

被折叠的 条评论
为什么被折叠?



