더하기를 구현하는 문제인데요 어렵지는 않습니다. 난이도는 Medium이네요
일의 자리부터 리스트 형태로 두 숫자가 입력되는데 반환 타입 역시 리스트로 동일하게 일의 자리부터 나오게 하면 됩니다. Carry만 잘 체크해주면 됩니다
파이썬으로 문제푸는 연습을 하고 있는데 참 익숙하지가 않네요 ;;;
class Solution(object):
def addTwoNumbers(self, l1, l2):
cursor1 = l1
cursor2 = l2
if cursor1 is None and cursor2 is None:
return ListNode()
head = None
carry = 0
while not (cursor1 is None and cursor2 is None and carry == 0):
cursor1 = ListNode() if cursor1 is None else cursor1
cursor2 = ListNode() if cursor2 is None else cursor2
_sum = cursor1.val + cursor2.val + carry
if _sum >= 10:
carry = 1
_sum -= 10
else:
carry = 0
if head is None:
head = ListNode(_sum)
else:
curr = head
while curr.next is not None:
curr = curr.next
curr.next = ListNode(_sum)
cursor1 = cursor1.next
cursor2 = cursor2.next
return head
제가 푼 python2 소스입니다. 이건 그냥 보기만 하시고... 솔루션 탭에서 가장 깔끔했던 소스를 갖고와봤습니다
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
result = ListNode(0)
result_tail = result
carry = 0
while l1 or l2 or carry:
val1 = (l1.val if l1 else 0)
val2 = (l2.val if l2 else 0)
carry, out = divmod(val1+val2 + carry, 10)
result_tail.next = ListNode(out)
result_tail = result_tail.next
l1 = (l1.next if l1 else None)
l2 = (l2.next if l2 else None)
return result.next
릿코드 badrabbit 유저의 코드입니다. 참 짧고 깔끔하네요. 이런걸 pythonic이라고 하나요? 아무튼 저도 빨리 이렇게 파이썬 문법이라도 마스터를 해야겠습니다
반응형
'Online Judge > LeetCode' 카테고리의 다른 글
[LeetCode][Python] 111. Minimum Depth of Binary Tree (0) | 2020.11.11 |
---|---|
[LeetCode][Python] 700. Search in a Binary Search Tree (0) | 2020.10.31 |
[LeetCode][Python] 7. Reverse Integer (0) | 2020.10.31 |
[LeetCode][Python] 3. Longest Substring Without Repeating Characters (0) | 2020.10.31 |
[LeetCode][C++] 1512. Number of Good Pairs (0) | 2020.10.11 |