代码
- 超时代码
- 思路:将l1和l2转换为常数,相加后再转为链表
def getval(l):
sum = 0
i = 0
while l.next!=None:
sum += l.val * 10**i
i += 1
sum += l.val * 10**i
return sum
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
l1_val = getval(l1)
l2_val = getval(l2)
sum = l1_val + l2_val
str_sum = str(sum)
lenth = len(str_sum)
node = ListNode(val=int(str_sum[0]), next=None)
for i in range(1,lenth):
node = ListNode(val=int(str_sum[i]), next=node)
return node
- A掉代码
- 思路:将链表上对应结点相加,保存进位;分为两链表都不为空、一链表为空、都为空的情况讨论;采用递归方法
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
carry = 0
return self.add(l1, l2, carry)
def add(self, l1, l2, carry):
if l1!=None and l2!=None:
val = l1.val + l2.val + carry
if val//10==1:
carry = 1
val = val - 10
else:
carry = 0
node = ListNode(val=val, next=self.add(l1.next, l2.next, carry))
return node
if l1==None or l2==None:
if l1!=None:
val = l1.val + carry
if val//10==1:
carry = 1
val = val - 10
else:
carry = 0
node = ListNode(val=val, next=self.add(l1.next, None, carry))
return node
if l2!=None:
val = l2.val + carry
if val//10==1:
carry = 1
val = val - 10
else:
carry = 0
node = ListNode(val=val, next=self.add(None, l2.next, carry))
return node
if l1==None and l2==None:
if carry==0:
return None
if carry==1:
node = ListNode(val=carry, next=None)
return node
编程漏洞
- 调用类内方法不要忘记加self eg. self.add(…)
- 方法传入参数的第一位不要忘记写self
- 再看下if else语法,用时方恨少
注意事项
- 链表的表示方式
- 常量转字符串,并获取每一位的值
- 如何获取常量的长度,每一位的数字(转成字符串操作str(),最后别忘记再转回来int())