全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

本文介绍一种改进的列表求和算法:对包含多个6和9的列表,自动排除每一对**相邻且顺序任意的6与9之间(含端点)的所有数字**,但保留两个6之间、两个9之间或孤立数字的值。

在常规“跳过6到9之间数字”的问题中,通常只处理 6 → ... → 9 这一单向区间(如经典 sum6 函数)。但本题引入关键 twist:6 和 9 是对称触发器——无论是 6...9 还是 9...6,只要它们成对出现(且中间无其他6/9打断),中间所有数字(包括该6和该9本身)都应被排除。

核心逻辑在于:我们不维护“是否在6-9区间内”的布尔状态,而是追踪最近一次遇到的是6还是9,并仅在遇到新触发器(6或9)时,才结算上一段非触发区间的累加和。这避免了嵌套或重叠区间的歧义,天然支持多组独立的 6↔9 段。

✅ 算法要点解析

  • 使用两个布尔标志 saw6 和 saw9 记录最近一次触发器类型;
  • 使用临时变量 temp 累加当前“安全区间”(即两个触发器之间、或开头到首个触发器之间)的数字和;
  • 当遇到 6:
    • 若此前已见过 6(即上一段以6开始),或尚未见过任何触发器(即这是第一个触发器),则将 temp 加入总和 → 表示前一段可累加;
    • 重置 temp = 0,并更新状态:saw6 = True, saw9 = False;
  • 当遇到 9:逻辑同理,仅角色互换;
  • 遇到普通数字:直接加到 temp;
  • 循环结束后,必须执行 the_sum += temp,以纳入最后一段(末尾无触发器结尾)的数值。

? 示例验证

以输入 list1 = [1,2,3,4,6,7,3,5,9,7,2,4,9,4,5,6,7,8,9,4,3,2,1] 为例:

子段 内容 是否计入 说明
[1,2,3,4] 1+2+3+4=10 开头至首个6前
[6,7,3,5,9] 完整 6→9 区间,整个跳过
[7,2,4] 7+2+4=13 9→9 之间 → 两个9之间不构成排除区间,全部保留
[9,4,5,6] 9→6 区间,跳过
[7,8,9] 6→9 区间,跳过
[4,3,2,1] 4+3+2+1=10 末尾无后续触发器,保留

总和 = 10 + 13 + 10 = 33,与预期一致。

? 完整可运行代码

def twistersum(nums):
    the_sum = 0
    temp = 0
    saw6 = saw9 = False
    for i in nums:
        if i == 6:
            # 结算上一段:若刚结束一个6段,或这是第一个触发器
            if saw6 or (not saw6 and not saw9):
                the_sum += temp
            temp = 0
            saw6 = True
            saw9 = False
        elif i == 9:
            # 同理:若刚结束一个9段,或这是第一个触发器
            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

⚠️ 注意事项

  • 该算法按首次出现顺序配对:6, a, 9, b, 6, c, 9 中,6-a-9 和 6-c-9 分别构成两段排除区,b 属于 9→6 之间的“间隙”,不被排除(因 9→6 本身即为有效排除对);
  • 6 和 9 自身永不计入,因其属于触发端点;
  • 时间复杂度 O(n),空间复杂度 O(1),适用于大规模列表;
  • 若需扩展支持更多触发数字(如 6/9/0),建议改用栈或状态机设计,而非硬编码分支。

掌握此双向触发区间处理思想,可灵活应对各类“条件屏蔽求和”场景,是提升逻辑建模能力的典型范例。


# 编码  #   # elif  # 循环  # 算法  # 这是  # 第一个  # 跳过  # 见过  # 布尔  # 首个  # 的是  # 这一  # 首次  # 多个 


相关文章: 存储型VPS适合搭建中小型网站吗?  宝塔建站助手安装配置与建站模板使用全流程解析  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  建站主机类型有哪些?如何正确选型  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  高防服务器如何保障网站安全无虞?  广德云建站网站建设方案与建站流程优化指南  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  建站之星代理如何优化在线客服效率?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  招商网站制作流程,网站招商广告语?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  微信h5制作网站有哪些,免费微信H5页面制作工具?  建站之星免费模板:自助建站系统与智能响应式一键生成  网站制作公司,橙子建站是合法的吗?  网站制作员失业,怎样查看自己网站的注册者?  如何快速搭建支持数据库操作的智能建站平台?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何用VPS主机快速搭建个人网站?  用v-html解决Vue.js渲染中html标签不被解析的问题  建站主机与服务器功能差异如何区分?  如何高效完成独享虚拟主机建站?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  建站主机选购指南:核心配置优化与品牌推荐方案  如何选择适合PHP云建站的开源框架?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  建站之星各版本价格是多少?  如何快速查询网址的建站时间与历史轨迹?  如何快速搭建FTP站点实现文件共享?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  音响网站制作视频教程,隆霸音响官方网站?  如何在建站之星网店版论坛获取技术支持?  c# 在高并发场景下,委托和接口调用的性能对比  如何在IIS中配置站点IP、端口及主机头?  潮流网站制作头像软件下载,适合母子的网名有哪些?  建站主机空间推荐 高性价比配置与快速部署方案解析  建站之星伪静态规则如何设置?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何在建站之星绑定自定义域名?  代刷网站制作软件,别人代刷火车票靠谱吗?  建站VPS选购需注意哪些关键参数?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  电商网站制作价格怎么算,网上拍卖流程以及规则?  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何用y主机助手快速搭建网站?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。