【问题标题】:Add to Array-Form of Integer - how to show the full result?添加到整数的数组形式 - 如何显示完整结果?
【发布时间】:2019-02-14 18:25:57
【问题描述】:

添加到整数的数组形式:假设我有A=[1,2,3]K = 50000,我想添加这两个并得到A=[5,0,1,2,3]

在我添加它们并将进位转换为列表后,但不知何故我无法打印完整的数组:

def addToArrayForm(A, K):
    A[-1] += K
    for i in range(len(A) - 1, -1, -1):
        carry, A[i] = divmod(A[i], 10)
        if i: A[i-1] += carry
    if carry:
        B=list(str(carry))
        A=B+A
        
    return A
  
A=[1,2,3]
addToArrayForm(A, 5000)
for i in range(len(A) ):
    print (A[i])

结果显示:1,2,3 :
但我期待5,0,1,2,3, 问题出在哪里?

【问题讨论】:

    标签: python arrays algorithm integer


    【解决方案1】:
    def add(a, k):
        return [int(j) for j in str(k + int(''.join(str(i) for i in a)))]
    

    例子

    >>> add([1,2,3], 50000)
    [5, 0, 1, 2, 3]
    

    【讨论】:

      【解决方案2】:

      您的原始代码的问题是命令A = B+A 没有按照您的预期执行。我不确定,因为你的函数返回一个给定的值(新的、更新的A),但你的主程序假定列表已就地更改。

      您返回的值是您期望的值。但是,它不再是原始对象A。表达式B+A 构建一个新列表;您的 local 变量 A 已更改为指向该变量并返回...您的主程序忽略它。

      做一个简单的改变:

      A=[1,2,3]
      A = addToArrayForm(A, 50000)    # I corrected this to 50000; you were short a 0
      

      输出:

      5
      0
      1
      2
      3
      

      更多问题

      请注意,这是不可持续的 - 您无法在此列表中进行额外的数学运算,因为您将 B 的元素保留为字符串,而不是整数。我想你会想要转换那些。


      另一种方式...

      如果您确实想原地改变 A,然后尝试将这些数字推到列表的开头,原地

      ...
          if carry:
              B = list(str(carry))
              for dig in B:
                  A.insert(0, int(dig))
      
      A=[1,2,3]
      addToArrayForm(A, 50000)
      ...
      

      【讨论】:

      • 谢谢,它确实修复了我的代码,但为什么我们需要在 addToArrayForm(A, 50000) 前面加上“A=”?我已经指定返回值为“A”,执行addToArrayForm(A, 50000)后,A应该是一个更新的列表...
      • 这是我回答的第二段。如果你想观察效果,​​print(id(A)) 在你的函数中的关键位置,以及在你的主程序中调用之前和之后。
      【解决方案3】:

      您可以通过将A 转换为整数,将其添加到K,然后将A 替换为总和来实现,无论K 中的位数如何,这都应该有效(或A)。

      def addToArrayForm(A, K):
          a = 0
          for d in A:
              a = a*10 + d
          A[:] = [int(d) for d in str(a + K)]
          return A
      
      A = [1, 2, 3]
      
      addToArrayForm(A, 50000)
      
      for i in range(len(A)):
          print(A[i])
      

      输出:

      5
      0
      1
      2
      3
      

      【讨论】:

        【解决方案4】:
        class Solution:
            def addToArrayForm(self, nums: List[int], k: int) -> List[int]:
                # convert the array form into a string    
                string=""
                for num in nums:
                    string+=str(num)
                # add the values
                res=int(string)+k
                # res is an int but we cannot iterate over int. So we convert it to str
                return[int(x) for x in str(res)]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-02
          • 2018-09-03
          • 2021-10-21
          • 1970-01-01
          • 1970-01-01
          • 2022-12-09
          • 2016-08-31
          • 1970-01-01
          相关资源
          最近更新 更多