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 为例):

司马诸葛
司马诸葛

基于企业知识文档,就可训练专属AI数字员工

下载
  • [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中文网欢迎大家前来学习。

529

2023.12.01

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

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

2

2025.12.22

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

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

359

2023.07.18

堆和栈区别
堆和栈区别

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

558

2023.08.10

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

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

378

2023.08.14

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

115

2025.12.24

拼豆图纸在线生成器
拼豆图纸在线生成器

拼豆图纸生成器有PixelBeads在线版、BeadGen和“豆图快转”;推荐通过pixelbeads.online或搜索“beadgen free online”直达官网,避开需注册的诱导页面。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

84

2025.12.24

俄罗斯搜索引擎yandex官方入口地址(最新版)
俄罗斯搜索引擎yandex官方入口地址(最新版)

Yandex官方入口网址是https://yandex.com。用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

553

2025.12.24

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

155

2025.12.24

热门下载

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

精品课程

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

共12课时 | 0.9万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

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

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