0

0

如何在列表求和中智能跳过6与9之间的所有数字(包括双向区间)

心靈之曲

心靈之曲

发布时间:2025-12-25 19:50:02

|

606人浏览过

|

来源于php中文网

原创

如何在列表求和中智能跳过6与9之间的所有数字(包括双向区间)

本文介绍一种改进的列表求和算法:当遇到数字6或9时,将两者之间(含6和9)的所有数字排除;若连续出现同类型边界(如6…6或9…9),中间数字仍需计入总和;支持6→9和9→6两种方向的区间识别。

在常规“跳过6到9之间数字”的问题中,通常只处理 6 → ... → 9 单向区间(如经典 sum6 函数)。但本题引入关键 twist:9 → ... → 6 同样构成排除区间,且需保证 6→6 或 9→9 之间的数字不被排除——即仅当6与9(或9与6)成对出现、且中间无同类型中断时,才触发排除逻辑。

为精准建模该行为,核心思路是:

  • 使用两个布尔标志 saw6 和 saw9 记录最近一次遇到的是6还是9;
  • 维护一个临时累加器 temp,持续累加当前“有效段”内的数字;
  • 每次遇到6或9时,根据历史状态决定是否将 temp 累加进最终结果,并重置 temp;
  • 关键判断逻辑在于:仅当新边界与上一个边界类型不同(即形成6↔9配对),或这是首次遇到边界时,才提交当前段的和;若连续遇到相同边界(如6后又遇6),说明前一段应保留,故立即将 temp 加入总和,再清空。

以下是完整可运行的实现:

def twistersum(nums):
    the_sum = 0
    temp = 0
    saw6 = saw9 = False

    for i in nums:
        if i == 6:
            # 若刚见过6(saw6=True),或尚未见过任何边界(saw6=saw9=False),
            # 说明当前6开启新段,应提交上一段(temp)并重置
            if saw6 or (not saw6 and not saw9):
                the_sum += temp
            temp = 0
            saw6 = True
            saw9 = False
        elif i == 9:
            # 同理:若刚见过9,或首次见边界,则提交temp
            if saw9 or (not saw6 and not saw9):
                the_sum += temp
            temp = 0
            saw6 = False
            saw9 = True
        else:
            temp += i

    # 循环结束后,追加最后一段未提交的数字
    the_sum += temp
    return the_sum

# 测试用例
list1 = [1,2,3,4,6,7,3,5,9,7,2,4,9,4,5,6,7,8,9,4,3,2,1]
print(twistersum(list1))  # 输出: 33

执行过程简析(以 list1 为例):

LAIKA
LAIKA

LAIKA 是一个创意伙伴,您可以训练它像您(或您想要的任何人)一样写作。

下载
  • [1,2,3,4] → temp=10
  • 遇 6:首次边界,提交 temp=10,the_sum=10,重置 temp=0,saw6=True
  • [7,3,5] → temp=15
  • 遇 9:与上一 6 配对,不提交,清空 temp=0,saw9=True
  • [7,2,4] → temp=13
  • 遇 9:连续 9,触发提交 → the_sum = 10 + 13 = 23,重置 temp=0,saw9=True
  • [4,5] → temp=9
  • 遇 6:9→6 配对,不提交,清空 temp=0,saw6=True
  • [7,8] → temp=15
  • 遇 9:6→9 配对,不提交,清空 temp=0
  • [4,3,2,1] → temp=10
  • 结尾追加:the_sum = 23 + 10 = 33

注意事项:

  • 该算法严格按顺序扫描,时间复杂度 O(n),空间复杂度 O(1);
  • 不依赖额外数据结构(如),避免嵌套区间歧义;
  • 若列表以6或9结尾,其后无配对边界,则末尾数字不会被遗漏(因最后 the_sum += temp 保障);
  • 所有非6/9数字均被无条件计入 temp,逻辑清晰无歧义。

此方案兼顾鲁棒性与可读性,适用于各类含多组交错6/9边界的求和场景。

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

534

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

15

2026.01.06

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

389

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

402

2023.08.14

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

6

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

28

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

12

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号