【问题标题】:max sum of consecutive digits in a number一个数字中连续数字的最大总和
【发布时间】:2013-11-09 23:19:43
【问题描述】:

我需要编写一个函数,将一个数字中的连续数字相加并返回它们的最大总和。我写了一个接收参数的函数,(m,t)。 m- 代表数字 (int),t (int also) 代表要求和的连续数字的数量。现在我希望它遍历数字中的所有数字,最后返回最大值。 我不明白为什么我的代码不起作用:

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)

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:
    >>> 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
    

    【讨论】:

    • 谢谢,但我想知道你能不能解释一下我的问题是什么?
    • @user2751595:我同意 PaulDraper 的观点,因为您在每次迭代时都会重置 lst,这就是您没有得到正确答案的原因。此外,您正在使用变量 d 而不定义它
    【解决方案2】:

    你的不起作用的原因是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) 运行时间(如果 n 是 m 中的位数,则为 O(n)),而不是简单的 O(t * log m)(或 O(t * n) )。

    【讨论】:

    • 没错,但是当我想附加它时我在开始时设置了一个空列表,这给了我一个错误
    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多