Python 数字中连续数字的最大和
我需要编写一个函数,将数字中的连续数字相加,并返回其中的最大和。我编写了一个函数来接收参数(m,t)。m—表示数字(int),t(int)也表示要求和的连续位数。现在我想让它遍历数字中的所有数字,最后返回最大值。 我不明白为什么我的代码不起作用:Python 数字中连续数字的最大和,python,python-3.x,Python,Python 3.x,我需要编写一个函数,将数字中的连续数字相加,并返回其中的最大和。我编写了一个函数来接收参数(m,t)。m—表示数字(int),t(int)也表示要求和的连续位数。现在我想让它遍历数字中的所有数字,最后返回最大值。 我不明白为什么我的代码不起作用: def sum_digits(m, t): str_m= str(m) for i in range(len(str_m)): if t+i<len(str_m): num= str_n[
def sum_digits(m, t):
str_m= str(m)
for i in range(len(str_m)):
if t+i<len(str_m):
num= str_n[i:t+i]
num1='+'.join(num)
num2= str(eval(num1))
lst= list(num2)
else:
break
return max (lst)
def和数字(m,t):
str_m=str(m)
对于范围内的i(len(str_m)):
如果t+i则您的不起作用的原因是lst
每次迭代都会被重置。我认为您打算在开始时设置它,并在每次迭代中添加它。此外:
啊哈!!!!您不需要eval
def max_sum(m, t):
digits = map(int, str(m))
max_sum = cur_sum = sum(digits[:t])
for i, x in enumerate(s[t:], t):
cur_sum += x - digits[i - t]
max_sum = max(max_sum, cur_sum)
return max_sum
此外,这有O(logm)运行时间(如果n是m中的位数,则为O(n)),而不是简单的O(t*logm)(或O(t*n))。谢谢,但我想知道您是否可以解释一下我的运行时间有什么问题?@user2751595:我同意PaulDraper的说法,您在每次迭代时都要重置lst
,这就是你没有得到正确答案的原因。另外,您正在使用一个变量d
,但没有正确定义它,但是当我在开始时设置一个空列表时,当我想附加它时,给了我一个错误
>>> def maxSum(m, t):
... m = str(m)
... answer = 0
... for digits in (m[i:i+t] for i in range(len(m)-t+1)):
... answer = max(answer, sum(int(d) for d in digits))
... return answer
...
>>> maxSum(1234567, 3)
18