Skip to main content

2. 两数相加 [medium]

2. 两数相加 [medium]

2020-05-31

https://leetcode-cn.com/problems/add-two-numbers/

image

  • second try

执行用时 :76 ms, 在所有 Python 提交中击败了53.08%的用户

内存消耗 :12.9 MB, 在所有 Python 提交中击败了5.55%的用户

# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None

Solution(object):
def addTwoNumbers(self, l1, l2):
rv = node = ListNode(None)
carry = 0
while(l1 or l2 or carry):
left = l1.val if l1 else 0
right = l2.val if l2 else 0
s = left + right + carry
carry, val = divmod(s, 10)
node.next = ListNode(val)
node = node.next
l1 = l1.next if l1 else 0
l2 = l2.next if l2 else 0
return rv.next
  • first try

执行用时 :112 ms, 在所有 Python 提交中击败了11.05%的用户

内存消耗 :12.7 MB, 在所有 Python 提交中击败了5.55%的用户

class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
print( self.origianl_val(l1), self.origianl_val(l2))
s = self.origianl_val(l1) + self.origianl_val(l2)
return self.val_to_link(s)

def origianl_val(self,link):
rv = link.val
power = 1
while(link.next):
link = link.next
rv += link.val * (10 ** power)
power += 1
return rv

def val_to_link(self, val):
rv = node = ListNode()
q, r = divmod(val, 10)
while(q != 0):
node.val = r
node.next = ListNode()
node = node.next
val = (val - r) / 10
q, r = divmod(val, 10)
node.val = r
return rv