【LeetCode 刷题】-- 2. 两数相加

2. 两数相加

题目描述:

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

测试示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

解题思路:

类比于手写列式相加,从个位数对齐相加,大于 10 则进位,依次递归。需要考虑以下几种情况:

  1. 两数均为空
    两数均为空是递归的跳出条件,但在跳出前需要考虑是否存在来自上一位的进位值
  2. 两数存在一个不为空
    将为空的链表数初始化为数值 0 进行下一步操作;当两数的节点数值均存在时相加,并递归到下一个节点。
class Solution(object):
    def addTwoNumbers(self, l1, l2):
        return self.add_node(l1, l2)

    def add_node(self, l1, l2, carry=0):
        if not l1 and not l2:
            return ListNode(1) if carry else None

        l1 = l1 if l1 else ListNode(0)
        l2 = l2 if l2 else ListNode(0)

        if l1.val >= 0 and l2.val >= 0:
            l1.val = l1.val + l2.val + carry
            c = 0
            if l1.val >= 10:
                l1.val -= 10
                c = 1
            l1.next = self.add_node(l1.next, l2.next, c)
        return l1

运行结果:

在这里插入图片描述

发布了5 篇原创文章 · 获赞 0 · 访问量 348

猜你喜欢

转载自blog.csdn.net/qq_40772371/article/details/103542616