Computer >> Máy Tính >  >> Lập trình >> Python

Thêm hai số trong Python


Giả sử chúng ta đã đưa ra hai danh sách liên kết không trống. Hai danh sách này đại diện cho hai số nguyên không âm. Các chữ số được lưu trữ theo thứ tự ngược lại. Mỗi nút của chúng chỉ chứa một chữ số. Thêm hai số và trả về kết quả dưới dạng danh sách được liên kết. Chúng tôi đang giả định rằng hai số không chứa bất kỳ số 0 nào ở đầu, ngoại trừ chính số 0. Vì vậy, nếu các số là 120 + 230, thì danh sách được liên kết sẽ là [0 → 2 → 1] + [0 → 3 → 2] =[0 → 5 → 3] =350.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau

  • Lấy hai danh sách l1 và l2. Khởi tạo head và temp là null
  • c:=0
  • trong khi l1 và l2 đều là danh sách không trống
    • nếu l1 khác rỗng, thì hãy đặt a:=0, nếu không thì đặt a:=l1.val
    • nếu l2 khác rỗng thì đặt b:=0, ngược lại đặt b:=l2.val
    • n:=a + b + c
    • nếu n> 9, thì c:=1 nếu không 0
    • node:=tạo một nút mới với giá trị n mod 10
    • nếu phần đầu là rỗng
      • head:=node và temp:=node

    • nếu không thì
      • head.next:=node và head:=node
    • l1:=nút tiếp theo của l1, nếu l1 tồn tại
    • l2:=nút tiếp theo của l2, nếu l2 tồn tại
  • nếu c khác 0, thì
    • nút:=nút mới có giá trị 1, tiếp theo của phần đầu:=nút
  • nhiệt độ trở lại

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn

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))

Đầu vào

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

Đầu ra

[0,5,3]