输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
?
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
?
限制:
1 <= target <= 10^5
题解1:
采用滑动窗口,设置左右两个指针,如果sum为target,则保存双指针内的值,如果sum>target,则左指针往右移动,如果sum< target,则右指针right往右移动。
func findContinuousSequence(target int) [][]int {
var res [][]int
var boundary=target/2+2
var left, right int
var sum int
var nums = make([]int,boundary)
for i:=0;i<boundary;i++{
nums[i]=i+1
}
for left<boundary&&right<boundary&&left<=right{
if sum == target{
res=append(res,nums[left:right])
sum -=nums[left]
left++
}else if sum < target{
sum += nums[right]
right++
}else{
sum -=nums[left]
left++
}
}
return res
}
这里 边界+2,是为了获取right==边界时的值。
题解2:
求和可以换成高斯求和公式。
原文地址:https://www.cnblogs.com/jiliguo/p/12430926.html
时间: 2024-11-06 10:02:04