返回
刷出新体验:LeetCode二刷之旅——两数相加篇
前端
2023-11-02 09:08:55
踏上二刷之旅:算法升华
LeetCode二刷,不仅是为了重复练习,更是为了在原有基础上深入探索算法精髓。二刷过程中,我们要做到:
- 抽丝剥茧,透视本质: 透过表象,直击算法核心,深刻理解其设计思想。
- 举一反三,触类旁通: 从一道题中总结通用解题思路,拓展到其他相关问题。
- 优化解法,精益求精: 在已有基础上,不断优化代码,提升算法效率。
两数相加:链表的华尔兹
两数相加题目如下:
给你两个非空的链表,表示两个非负整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将这两个数相加,并以相同形式返回一个表示和的链表。
看似简单,却暗藏玄机。解题的关键在于对链表操作的熟练掌握以及对进位处理的巧妙考量。
解题舞步,优雅相加
我们按照题目要求,一步步拆解解题思路:
- 定义结果链表: 用于存储最终的相加结果。
- 定义进位: 初始化为0,用于记录相加过程中产生的进位。
- 循环相加: 只要进位不为0或两个链表中仍有节点未处理,就继续循环。
- 每次循环: 计算当前两个链表节点的值和进位之和,并取个位数作为结果。将计算出的结果添加到结果链表中。如果和大于等于10,则将进位记为1,否则进位为0。
- 返回结果: 循环结束后,返回结果链表。
代码展示,算法之美
以下代码清晰展示了解题思路:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def addTwoNumbers(l1, l2):
dummy = ListNode()
curr = dummy
carry = 0
while l1 or l2 or carry:
val1 = l1.val if l1 else 0
val2 = l2.val if l2 else 0
sum = val1 + val2 + carry
carry = sum // 10
curr.next = ListNode(sum % 10)
curr = curr.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return dummy.next
总结提升,算法进阶
通过二刷两数相加,我们不仅巩固了链表操作的基础,还锻炼了进位处理的技巧。更重要的是,二刷让我们对算法的理解更加深入,能够从容应对更复杂的算法问题。
算法学习是一条漫漫征途,二刷只是其中一站。在未来的学习中,让我们继续保持求知若渴的精神,不断突破自我,在算法的世界中尽情驰骋!