2013-11-09 57 views
0

我需要编写一个函数,将数字中的连续数字相加并返回它们中最大的数字。我写了一个接收参数的函数(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[i:t+i] 
      num1='+'.join(num) 
      num2= str(eval(num1)) 
      lst= list(num2) 
     else: 
      break 


return max (lst) 

回答

0

你不工作的原因是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(log M)运行时间(或为O(n),如果n是在m数位的数量),而不是幼稚O(T *日志米)(或O( t * n))。

+0

这就是正确的,但正如我在beginnig设置空单时,我想将其追加给了我一个错误 – user2751595

0
>>> 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 
+0

谢谢,但我想知道,如果你能解释我什么是与我的问题呢? – user2751595

+0

@ user2751595:我同意PaulDraper的看法,那就是你在每次迭代时重置'lst',这就是为什么你没有得到正确的答案。另外,你正在使用一个变量'd'而没有定义它 – inspectorG4dget

相关问题