返回

初入LeetCode,一路通关,今天也要稳稳拿下!

闲谈

今天早上,突发奇想,想要在LeetCode上刷刷题,于是就来了。在这里,我将记录自己在LeetCode上的第一天之旅,分享刷题笔记和一些小提示。废话不多说,开始吧!

第一题:两数相加

题目

给出两个 非空 的链表,它们代表两个非负整数。数字存储在链表中每个节点的数值中,逐节点组成从左到右的顺序。

对这两个数字进行相加,并以相同形式返回一个表示和的链表。

示例:

  • 输入:l1 = [2,4,3], l2 = [5,6,4]
  • 输出:[7,0,8]
  • 解释:342 + 465 = 807.

我的解题思路:

首先,我们定义两个指针,分别指向两个链表的头部节点。然后,我们循环遍历这两个链表,将对应位置的节点值相加,并将结果存储在新的链表中。如果相加的结果大于或等于10,则将进位记为1,并在下一次循环中将其添加到相加的结果中。最后,我们将新的链表返回作为答案。

def addTwoNumbers(l1, l2):
  # 定义两个指针,分别指向两个链表的头部节点
  p1 = l1
  p2 = l2

  # 定义一个新的链表来存储结果
  result = ListNode(0)
  # 定义一个指针指向结果链表的尾部节点
  p = result

  # 进位
  carry = 0

  # 循环遍历两个链表
  while p1 or p2 or carry:
    # 将对应位置的节点值相加
    sum = 0
    if p1:
      sum += p1.val
      p1 = p1.next
    if p2:
      sum += p2.val
      p2 = p2.next
    sum += carry

    # 处理进位
    carry = sum // 10
    sum %= 10

    # 将结果添加到结果链表中
    p.next = ListNode(sum)
    p = p.next

  # 返回结果链表
  return result.next

小结:

两数相加是LeetCode上的一道经典题目,难度为简单。这道题考查了链表的基本操作和进位的处理。通过这道题,我复习了链表的基本操作,并对进位的处理有了更深入的理解。

第二题:两数相乘

题目:

给出两个以字符串形式表示的非负整数 num1 和 num2,返回这两个数相乘的结果。

示例:

  • 输入:num1 = "123", num2 = "456"
  • 输出:"56088"

我的解题思路:

这道题可以使用逐位相乘的方法来解决。首先,我们定义两个指针,分别指向两个字符串的尾部。然后,我们循环遍历两个字符串,将对应位置的字符相乘,并将结果存储在一个新的字符串中。最后,我们将新的字符串返回作为答案。

def multiply(num1, num2):
  # 定义两个指针,分别指向两个字符串的尾部
  p1 = len(num1) - 1
  p2 = len(num2) - 1

  # 定义一个新的字符串来存储结果
  result = ""

  # 进位
  carry = 0

  # 循环遍历两个字符串
  while p1 >= 0 or p2 >= 0 or carry:
    # 将对应位置的字符相乘
    sum = 0
    if p1 >= 0:
      sum += int(num1[p1])
      p1 -= 1
    if p2 >= 0:
      sum += int(num2[p2])
      p2 -= 1
    sum += carry

    # 处理进位
    carry = sum // 10
    sum %= 10

    # 将结果添加到结果字符串中
    result = str(sum) + result

  # 返回结果字符串
  return result

小结:

两数相乘是LeetCode上的一道中等难度题目。这道题考查了字符串的基本操作和逐位相乘的方法。通过这道题,我复习了字符串的基本操作,并对逐位相乘的方法有了更深入的理解。

结语:

LeetCode上的题目难度不一,从简单到困难都有。通过刷题,我们可以不断提高自己的编程能力。我将继续挑战更多的LeetCode题目,并分享我的刷题经验。希望大家能够和我一起学习,共同进步!