Scribbling

LeetCode: 2. Add Two Numbers 본문

Computer Science/Coding Test

LeetCode: 2. Add Two Numbers

focalpoint 2021. 8. 10. 13:39

1. 노가다성 답안

class Solution:
    def addTwoNumbers(self, l1, l2, up=0):
        if l1 != None and l2 != None:
            val1 = l1.val
            val2 = l2.val
            val = (val1 + val2 + up) % 10
            up = (val1 + val2 + up) // 10
            ret_node = ListNode(val=val)
            ret_node.next = self.addTwoNumbers(l1.next, l2.next, up=up)
        elif l1 == None and l2 != None:
            val2 = l2.val
            val = (val2 + up) % 10
            up = (val2 + up) // 10
            ret_node = ListNode(val=val)
            ret_node.next = self.addTwoNumbers(l1, l2.next, up=up)
        elif l1 != None and l2 == None:
            val1 = l1.val
            val = (val1 + up) % 10
            up = (val1 + up) // 10
            ret_node = ListNode(val=val)
            ret_node.next = self.addTwoNumbers(l1.next, l2, up=up)
        else:
            val = up
            if up != 0:
                ret_node = ListNode(val=val)
            else:
                return None                        
        return ret_node

 

2. 짧은 답안

class Solution:
    def addTwoNumbers(self, l1, l2, up=0):
        val = (l1.val + l2.val + up) % 10
        up = (l1.val + l2.val + up) // 10
        ret_node = ListNode(val=val)
        
        now_node = ret_node
        while l1.next != None or l2.next != None or up != 0:
            if l1.next == None:
                l1.next = ListNode(val=0)
            if l2.next == None:
                l2.next = ListNode(val=0)
            
            val = (l1.next.val + l2.next.val + up) % 10
            up = (l1.next.val + l2.next.val + up) // 10
            next_node = ListNode(val=val)
            now_node.next = next_node
            
            now_node = next_node
            l1 = l1.next
            l2 = l2.next
            
        return ret_node