Python中新增兩個數字


假設我們有兩個非空的連結串列。這兩個連結串列表示兩個非負整數。數字以逆序儲存。它們的每個節點只包含一位數字。將這兩個數字相加,並將結果作為連結串列返回。我們假設這兩個數字不包含任何前導零,除了數字 0 本身。因此,如果數字是 120 + 230,則連結串列將是 [0 → 2 → 1] + [0 → 3 → 2] = [0 → 5 → 3] = 350。

為了解決這個問題,我們將遵循以下步驟:

  • 取兩個列表 l1 和 l2。將 head 和 temp 初始化為 null。
  • c := 0
  • 當 l1 和 l2 都是非空列表時
    • 如果 l1 非空,則設定 a := 0,否則設定 a := l1.val
    • 如果 l2 非空,則設定 b := 0,否則設定 b := l2.val
    • n := a + b + c
    • 如果 n > 9,則 c := 1,否則為 0
    • node := 建立一個值為 n mod 10 的新節點
    • 如果 head 為 null
      • head := node 且 temp := node

    • 否則
      • head.next := node,且 head := node
    • l1 := l1 的下一個節點,如果 l1 存在
    • l2 := l2 的下一個節點,如果 l2 存在
  • 如果 c 不為零,則
    • node := 值為 1 的新節點,head 的 next := node
  • 返回 temp

示例(Python)

讓我們看看下面的實現,以便更好地理解。

 線上演示

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      self.next = next
def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
   return head
def print_list(head):
   ptr = head
   print('[', end = "")
   while ptr:
      print(ptr.val, end = ", ")
      ptr = ptr.next
   print(']')
class Solution:
   def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
      head = None
      temp = None
      c = 0
      while l1 or l2:
         if not l1:
            a= 0
         else:
            a = l1.val
         if not l2:
            b=0
         else:
            b = l2.val
         n = a +b + c
         c = 1 if n>9 else 0
         node = ListNode(n%10)
         if not head:
            head = node
            temp = node
         else:
            head.next = node
            head = node
         l1 = l1.next if l1 else None
         l2 = l2.next if l2 else None
      if c:
         node = ListNode(1)
         head.next = node
      return temp
ob1 = Solution()
l1 = make_list([0,2,1])
l2 = make_list([0,3,2])
print_list(ob1.addTwoNumbers(l1, l2))

輸入

[0,2,1]
[0,3,2]

輸出

[0,5,3]

更新於:2020年4月27日

3K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.