20200525 리트코드

Add Two Numbers

입력으로 양의 정수가 저장된 LinkedList가 주어질 때 각 리스트를 reverse한 값을 더하고 다시 LinkedList로 만드는 문제이다.

Js에서는 같은 풀이로 풀면 두 리스트의 합이 1경이 넘어간 시점부터 합을 리스트로 바꾸는 과정에서 잘못된 연산을 한다.

console.log(98765432198765245 % 10) // 8...........

-(2⁵³-1) 부터 2⁵³ -1 까지는 정확히 IEEE-754로 표현될 수 있지만, 그 초과와 이하 는 IEEE-754로 직접 표현될 수 없으며 가까운 수나 0으로 반올림 한다. 라고 구글에 나와있는데 그럼 0이 나와야하는거 아닌가,, 나중에 스터디 있을 때 리터분들한테 물어봐야겠다.

https://www.exploringbinary.com/floating-point-converter/ 에 따르면 98765432198765245에 가장 가까운 숫자는 98765432198765248이다. 따라서 8이 나온다

그래서 일단은 파이썬으로 풀었다.

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def getSum(node: ListNode):
    i = 0
    result = 0
    while node:
        result += node.val * pow(10, i)
        node = node.next
        i += 1
    return result

def converNumToListNode(num):
    result = ListNode()
    cur = result
    while num > 0:
        cur.val = num % 10
        num //= 10
        if (num > 0):
            cur.next = ListNode()
            cur = cur.next
    return result


class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        total = getSum(l1) + getSum(l2)
        return converNumToListNode(total)

Written by@[HongDongUk]
공부한 것을 소소하게 적는 블로그.

GitHubFacebook