有没有什么方法可以使用更少的内存并缩短运行时间?

2024-10-03 21:31:03 发布

您现在位置:Python中文网/ 问答频道 /正文

提示如下: 根据以下规则构造一个数字三角形:

  1. 第一行包含起始编号
  2. 每一新行比上一行多一个数字
  3. 每个数字都比最后一个数字大
  4. 在添加到“三角形”之前,请确保将多位数的所有字符添加在一起,形成一位数字
  5. 返回“三角形”中最后一行的总和

我的答案是:第一个函数处理第四个要求,它将一个数字的数字相加,直到只有一个数字。示例:123=1+2+3=6。第二个函数采用s(起始值)、d(增量)和r(行数)。它创建boxnum,它是三角形中框的总数,以及必须将增量添加到上一个值的次数。如果r=99999,整个代码将循环那么多次,它将超过时间限制,这是我的问题。我在存储方面也有问题,因为每个值都被追加到列表中,而实际上我只需要最后一行。我不知道如何重新编写和减少我的代码

def multidigit(x):
  numsum = 0 
  if x < 9:
    return(x)
  else:
    for number in str(x):
      numsum += int(number)
    if numsum > 9:
      return(multidigit(numsum))
    else:
      return(numsum)

def sumOfLastRow(s, d, r):
  rowslist = []
  rowslist.append(multidigit(s))
  incrementnum = s
  boxnum = 0
  for i in range(r+1):
    boxnum = boxnum + i
  for i in range(boxnum-1):
    incrementnum = incrementnum + d
    if incrementnum > 9:
      incrementnum = multidigit(incrementnum)
    rowslist.append(incrementnum)
  splitlist = rowslist[-r:]
  rowslist.clear()
  total = 0
  for i in range(len(splitlist)):
    total = total + splitlist[i]
  return(total)

Tags: 函数inforreturnifrange数字total
1条回答
网友
1楼 · 发布于 2024-10-03 21:31:03
if x < 9:
    return(x)

这看起来不对。 可能您是从x==9的情况下的无限循环错误开始的, 然后在最后的else上钉上大头钉,把它盖住。 我打赌你想要

if x <= 9:
    return int(x)

要简单得多

return sum(map(int, str(x)))

在计算total时,可以使用类似的习惯用法


for i in range(r+1):
    boxnum = boxnum + i

这里不需要循环,因为二次闭式解是可用的。 https://dev.to/alisabaj/the-gauss-sum-and-solving-for-the-missing-number-996

相关问题 更多 >