【剑指Offer】和为S的连续正数序列 解题报告(Python)

【剑指Offer】和为S的连续正数序列 解题报告(Python)

标签(空格分隔): 剑指Offer


题目地址:https://www.nowcoder.com/ta/coding-interviews

题目描述:

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

输出描述:

输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

解题方法

上题是求,和为S的两个数字。这个题变成了和为S的连续子序列。其实做法类似。这个题使用了两个指针small 和 big,也是将两个指针根据和的条件进行右移的过程。

这里写图片描述

代码:

# -*- coding:utf-8 -*-
class Solution:
    def FindContinuousSequence(self, tsum):
        small, big = 1, 2
        _len = (tsum + 1) / 2
        curr = small + big
        res = []
        while small < _len:
            if curr == tsum:
                res.append(range(small, big + 1))
            while curr > tsum and small < _len:
                curr -= small
                small += 1
                if curr == tsum:
                    res.append(range(small, big + 1))
            big += 1
            curr += big
        return res

Date

2018 年 3 月 26 日 – 学车要早起,困= =

posted @ 2018-03-26 15:11  负雪明烛  阅读(35)  评论(0)    收藏  举报