当前位置: 首页 > article >正文

Python | Leetcode Python题解之第445题两数相加II

题目:

题解:

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if head is None or head.next is None:
            return head
        new_head = self.reverseList(head.next)
        head.next.next = head  # 把下一个节点指向自己
        head.next = None  # 断开指向下一个节点的连接,保证最终链表的末尾节点的 next 是空节点
        return new_head

    # l1 和 l2 为当前遍历的节点,carry 为进位
    def addTwo(self, l1: Optional[ListNode], l2: Optional[ListNode], carry=0) -> Optional[ListNode]:
        if l1 is None and l2 is None:  # 递归边界:l1 和 l2 都是空节点
            return ListNode(carry) if carry else None  # 如果进位了,就额外创建一个节点
        if l1 is None:  # 如果 l1 是空的,那么此时 l2 一定不是空节点
            l1, l2 = l2, l1  # 交换 l1 与 l2,保证 l1 非空,从而简化代码
        carry += l1.val + (l2.val if l2 else 0)  # 节点值和进位加在一起
        l1.val = carry % 10  # 每个节点保存一个数位
        l1.next = self.addTwo(l1.next, l2.next if l2 else None, carry // 10)  # 进位
        return l1

    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        l1 = self.reverseList(l1)
        l2 = self.reverseList(l2)  # l1 和 l2 反转后,就变成【2. 两数相加】了
        l3 = self.addTwo(l1, l2)
        return self.reverseList(l3)

http://www.kler.cn/news/330639.html

相关文章:

  • pdfbox麒麟docker转PDF乱码问题
  • Brave编译指南2024 MacOS篇-环境配置(四)
  • 加密与安全_TOTP 一次性密码生成算法
  • 行为设计模式 -策略设计模式- JAVA
  • sentinel原理源码分析系列(三)-启动和初始化
  • 人生四大“钱关”过不去,我推荐你读这4本书
  • Redis接口访问优化
  • 六.应用层
  • python 实现power iteration幂迭代算法
  • 【C语言指南】数据类型详解(下)——自定义类型
  • 【Android 14源码分析】Activity启动流程-3
  • 全栈杂谈第四期 什么是雪花算法
  • 打造智慧金融:引领未来的投资之路
  • 基于RBAC的通用权限管理系统的详细分析与实现(实现篇-Spring Security安全管理框架)
  • 如何避免我的住宅ip被污染
  • 解决方案:梯度提升树(Gradient Boosting Trees)跟GBDT(Gradient Boosting Decision Trees)有什么区别
  • 已经部署了ssl证书,网站仍被Chrome标记为不安全怎么办?
  • golang grpc初体验
  • OpenEuler配置本地yum源
  • 排序算法之快速排序