두 숫자 더하기 II

1895 단어 leetcodetheabbiedsa
두 개의 음수가 아닌 정수를 나타내는 두 개의 비어 있지 않은 연결 목록이 제공됩니다. 가장 중요한 숫자가 먼저 나오고 각 노드에는 한 자리 숫자가 포함됩니다. 두 숫자를 더하고 합계를 연결 리스트로 반환합니다.

숫자 0 자체를 제외하고 두 숫자에 선행 0이 포함되어 있지 않다고 가정할 수 있습니다.

예 1:



입력: l1 = [7,2,4,3], l2 = [5,6,4]
출력: [7,8,0,7]

예 2:

입력: l1 = [2,4,3], l2 = [5,6,4]
출력: [8,0,7]

예 3:

입력: l1 = [0], l2 = [0]
출력: [0]

제약:
  • 각 연결 목록의 노드 수가 [1, 100] 범위에 있습니다.
  • 0 <= Node.val <= 9
  • 목록이 선행 0이 없는 숫자를 나타내는 것이 보장됩니다.

  • 후속 조치: 입력 목록을 뒤집지 않고 문제를 해결할 수 있나요?

    해결책:

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def add(self, l1, l2, carry = 0):
            if l1 or l2:
                l1val = l1.val if l1 else 0
                l2val = l2.val if l2 else 0
                currval = l1val + l2val + carry
                curr = ListNode(val = currval % 10)
                curr.next = self.add(l1.next if l1 else None, l2.next if l2 else None, carry = currval // 10)
                return curr
            else:
                if carry > 0:
                    return ListNode(val = carry)
                return None
    
        def reverse(self, head):
            curr = head
            prev = None
            while curr:
                nxt = curr.next
                curr.next = prev
                prev = curr
                curr = nxt
            return prev
    
        def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
            l1 = self.reverse(l1)
            l2 = self.reverse(l2)
            return self.reverse(self.add(l1, l2, carry = 0))
    

    좋은 웹페이지 즐겨찾기