题目
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
leetcode链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/
思路
- 双指针循环,注意终止条件
代码
/**
* @param {number} target
* @return {number[][]}
*/
function getSum(num1, num2) {
return (num1 + num2) * (num2 - num1 + 1) / 2
}
function getPath(start, end) {
const result = []
for (let i = start; i <= end; i++) {
result.push(i)
}
return result
}
var findContinuousSequence = function (target) {
if (!target) return []
const result = []
let left = 1
let right = 1
const end = Math.ceil(target / 2)
while (right <= end) {
const sum = getSum(left, right)
if (sum === target) {
result.push(getPath(left, right))
left++
right++
} else if (sum < target) {
right++
} else {
left++
}
}
return result
}