难度:简单
题目描述:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例:
输入:target = 9输出:[[2,3,4],[4,5]]
解题思路:
先把数分解9=1+8=2+7=3+6=4+5,按这种,找到可能组成正确结果的数组,根据数的结构,易知结果可能存在[1,2,3,4,5]中,不难发现数组最后一个数,如果target是偶数就是target/2,如果是奇数就是target/2取整加一,即Math.floor(target/2)+1 或采用二进制取整(target/2 | 0) + 1,再对找到的数组采用滑动窗口模型,找出答案。
var findContinuousSequence = function (target) {let index = target % 2 === 0 ? target / 2 : (target / 2 | 0) + 1let res = []let temp = []let sum = 0for (let i = 1; i <= index; i++) {temp.push(i)sum = sum + iwhile (sum > target) {sum -= temp[0]temp.shift()}if (sum === target) {temp.length >= 2 && res.push([...temp])}}return res;};
