Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เพิ่มสองตัวเลขใน Python


สมมติว่าเราได้ให้รายการที่เชื่อมโยงที่ไม่ว่างเปล่าสองรายการ สองรายการนี้แสดงตัวเลขจำนวนเต็มไม่เป็นลบสองจำนวน ตัวเลขจะถูกเก็บไว้ในลำดับย้อนกลับ แต่ละโหนดมีตัวเลขเพียงหลักเดียว เพิ่มตัวเลขสองตัวและส่งคืนผลลัพธ์เป็นรายการที่เชื่อมโยง เรากำลังสันนิษฐานว่าตัวเลขทั้งสองไม่มีเลขศูนย์นำหน้า ยกเว้นตัวเลข 0 เอง ดังนั้นหากตัวเลขคือ 120 + 230 รายการที่เชื่อมโยงจะเป็น [0 → 2 → 1] + [0 → 3 → 2] =[0 → 5 → 3] =350

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้

  • เอาสองรายการ l1 และ l2. เริ่มต้น head และ temp เป็น null
  • ค :=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.next :=โหนด และ head :=โหนด
    • l1 :=โหนดถัดไปของ l1 ถ้ามี l1 อยู่
    • l2 :=โหนดถัดไปของ l2 ถ้ามี l2 อยู่
  • ถ้า c ไม่ใช่ศูนย์ แล้ว
    • โหนด :=โหนดใหม่ที่มีค่า 1 ถัดไปของส่วนหัว :=โหนด
  • อุณหภูมิกลับ

ตัวอย่าง(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]