

新闻资讯
技术学院本文介绍一种改进的列表求和算法:当遇到数字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)成对出现、且中间无同类型中断时,才触发排除逻辑。
为精准建模该行为,核心思路是:
以下是完整可运行的实现:
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 为例):
✅ 注意事项:
此方案兼顾鲁棒性与可读性,适用于各类含多组交错6/9边界的求和场景。