菜鸟系列 Golang 实战 Leetcode —— 面试题57 - II. 和为s的连续正数序列

输入一个正整数 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:
求和可以换成高斯求和公式。

相关推荐