2. Add Two Numbers

LONGNEW·2023년 7월 7일
0

CP

목록 보기
116/155

https://leetcode.com/problems/add-two-numbers/description/?envType=featured-list&envId=top-google-questions

input :

  • l1, l2

output :

  • 링크드 리스트로 연결된 두 숫자의 합을 새로운 링크드 리스트로 제작하시오.
  • 새로운 링크드 리스트의 head를 반환값으로 제공하시오.

조건 :

  • 노드의 값은 0 ~ 9 사이이다.
  • 하나의 링크드 리스트를 이루는 노드의 개수는 1 ~ 100 사이이다.

Solution explain : Solution1

idea

  • 계산하는 과정은 l1, l2를 순회하며 합을 계산하는 것과 동일하다.
  • carry를 통해 덧셈하고 남는 값을 체크한다.
  • carry를 통해서 계속 덧셈을 할수도 있으니 조건에 포함되어야 한다.
  • 반복문을 수행하는 조건은 carry, l1, l2 셋 중에 하나라도 존재하면 해야한다.

주의

  • 제공하는 예시가 ListNode라는 클래스 형태이므로 해당 객체로 반환값을 주어야 한다.
  • head, temp_head와 같이 1개는 반환용으로 설정하고 나머지는 계속 업데이트 되게 한다.
  • 나머지, 나누기 연산을 통해 쉽게 계산을 하도록 하자.
class Solution:
    def addTwoNumbers(self, l1, l2):
        carry = 0
        head = None
        temp_head = None

        while carry or l1 is not None or l2 is not None:
            val_l1, val_l2 = 0, 0

            if l1 is not None:
                val_l1 = l1.val
                l1 = l1.next
            if l2 is not None:
                val_l2 = l2.val
                l2 = l2.next

            temp = val_l1 + val_l2 + carry
            ret = ListNode()
            ret.val = temp % 10
            carry = temp // 10
            if head is None:
                head = ret
                temp_head = ret
            else:
                temp_head.next = ret
                temp_head = temp_head.next
        return head

# s = Solution()
# print(s.addTwoNumbers([0], [0]))
# print(s.addTwoNumbers([2,4,3], [5,6,4]))
# print(s.addTwoNumbers([9,9,9,9,9,9,9], [9,9,9,9]))

0개의 댓글