Leetcode-2.两数相加

代码

  • 超时代码
  • 思路:将l1和l2转换为常数,相加后再转为链表
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

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掉代码
  • 思路:将链表上对应结点相加,保存进位;分为两链表都不为空、一链表为空、都为空的情况讨论;采用递归方法
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
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())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值