剑指 Offer 57 - II. 和为s的连续正数序列_CodingPark编程公园
发布日期:2021-06-29 15:49:25 浏览次数:2 分类:技术文章

本文共 1588 字,大约阅读时间需要 5 分钟。

和为s的连续正数序列

问题

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]

链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof

解答

方法1

暴力版-双指针

class Solution:    def findContinuousSequence(self, target: int) -> List[List[int]]:        j = 1        fin = []        while j < target:            i = j            sum = 0            slave = []            for c in range(target):                if sum == target:                    fin.append(slave)                    j = j + 1                    break                if sum > target:                    j = j + 1                    break                sum = sum + i                slave.append(i)                i = i + 1        return fin

在这里插入图片描述

方法2

优化版-双指针

class Solution:    def findContinuousSequence(self, target: int) -> List[List[int]]:        i, j, s, res = 1, 2, 3, []        while i < j:            if s == target:                res.append(list(range(i, j + 1)))            if s >= target:                s -= i                i += 1            else:                j += 1                s += j        return res

在这里插入图片描述

二刷时

class Solution:    def findContinuousSequence(self, target: int) -> List[List[int]]:        res = []        for i in range(1, target):            sum = i            for j in range(i+1, target):                sum = sum + j                if sum > target:                    break                elif sum == target:                    res.append([i for i in range(i, j+1)])        return res

在这里插入图片描述

在这里插入图片描述

转载地址:https://codingpark.blog.csdn.net/article/details/113327680 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:剑指 Offer 52. 两个链表的第一个公共节点_⚠️特别注意_CodingPark编程公园
下一篇:剑指 Offer 57. 和为s的两个数字_CodingPark编程公园

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月02日 23时00分57秒