题目链接(中等)
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( m a x ( m , n ) ) O(max(m,n)) O(max(m,n)) | O ( m a x ( m , n ) ) O(max(m,n)) O(max(m,n)) | 76ms (>60.58%) |
Ans 2 (Python) | O ( m a x ( m , n ) ) O(max(m,n)) O(max(m,n)) | O ( m a x ( m , n ) ) O(max(m,n)) O(max(m,n)) | 68ms (>88.91%) |
解法一(按位依次相加):
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
ans = ListNode(0) # 返回结果
carry = 0 # 进位计数
node = ans # 当前位
while True:
value = carry
if l1:
value += l1.val
l1 = l1.next
if l2:
value += l2.val
l2 = l2.next
node.val = value % 10
carry = value // 10
if l1 or l2 or carry == 1:
node.next = ListNode(0)
node = node.next
else:
break
return ans
解法二(优化代码结构):
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
ans = node = ListNode(None) # 返回结果 当前节点
now = 0 # 进位计数
while l1 or l2 or now:
now += (l1.val if l1 else 0) + (l2.val if l2 else 0)
node.next = ListNode(now % 10)
node = node.next
now //= 10
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return ans.next