JZ41 和为S的连续正数序列

和为S的连续正数序列

题目:计算有多少种连续的正数序列的和为100(至少包含两个数,输出要求序列内从小到大的顺序,序列间按照从小到大的顺序)

思路:双指针

func pushres(small, big int) []int {
    var tmp []int    
    for i := small; i <= big; i++ {
        tmp = append(tmp, i)
    }
    return tmp
}

func FindContinuousSequence(sum int) [][]int {
    result := [][]int{}        
    flag := 0
    if sum <= 2 {
        return result
    }
    small, big := 1, 2
    flag = small + big
    end := (1 + sum) / 2
    for small < end {//不需要判断small < big,这种情况因为small==big的情况才有可能等于sum,small<end,不可能出现这种情况
       var tmp []int//不需要每次都清空tmp
        if flag == sum {                
            tmp = pushres(small,big)
            result = append(result, tmp)
        }

        for (small < end) && (flag > sum) {
            flag -= small
            small++
            if flag == sum {                
                tmp = pushres(small,big)
                result = append(result, tmp)
            }
            
        }
        big++
        flag += big
    }
    return result
}
原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14641255.html