力扣刷题Day 30:两数相加(2)
1.题目描述
2.思路
方法1:首先必须要遍历两个链表,分别得到num1和num2,将两数相加,然后将结果num3逆序切割成字符形式分配给伪头后的每个结点。
方法2:l1和l2中相同位置的数字可以直接相加赋给对应位置的l3,也采用伪头的方法。
3.代码(Python3)
方法1:
class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:l3 = ListNode()node1, node2, node3 = l1, l2, l3num1, num2 = '', ''while node1:num1 = str(node1.val) + num1node1 = node1.nextwhile node2:num2 = str(node2.val) + num2node2 = node2.nextnum1, num2 = int(num1), int(num2)num3 = list(str(num1 + num2))[::-1]for val in num3:node3.next = ListNode(int(val))node3 = node3.nextreturn l3.next
方法2:
class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:l3 = ListNode()node1, node2, node3 = l1, l2, l3carry = 0while node1 or node2 or carry:val1 = node1.val if node1 else 0val2 = node2.val if node2 else 0sum = val1 + val2 + carryif sum >= 10:carry = 1node3.next = ListNode(sum % 10)else:carry = 0node3.next = ListNode(sum)if node1:node1 = node1.nextif node2:node2 = node2.nextnode3 = node3.nextreturn l3.next
4.执行情况
方法1:
方法二:
5.感想
方法1牺牲空间换取时间,方法2牺牲时间换取空间。