Add Two Numbers

초보개발·2023년 9월 14일
0

leetcode

목록 보기
38/39

https://leetcode.com/problems/add-two-numbers/?envType=study-plan-v2&envId=top-interview-150

문제

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

풀이

  • 리스트의 노드 값은 음수가 아닌 한자리수의 정수만 허용되며 각 자리의 숫자는 거꾸로 되어있다. 그래서 앞부터 더해주면 된다.
  • 두 리스트를 순서대로 비교하면서 더한다.
    • l1가 존재하면 carry에 값을 더해주고 l1를 l1.next로 이동한다.
    • l2가 존재하면 carry에 값을 더해주고 l2를 l2.next로 이동한다.
  • carry의 값이 10 이상일 때를 고려해 주어야 한다.
    • carry % 10의 값을 갖는 ListNode를 만들어 curr.next에 이어준다.
    • curr은 curr.next가 되고 carry는 10으로 나눈 몫으로 갱신한다.

Solution(Rutime: 61ms)

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        head = curr = ListNode(0)
        carry = 0

        while l1 or l2 or carry:
            if l1:
                carry += l1.val
                l1 = l1.next
            if l2:
                carry += l2.val
                l2 = l2.next
            
            curr.next = ListNode(carry % 10)
            curr = curr.next
            carry //= 10
        
        return head.next

0개의 댓글