初入LeetCode,一路通关,今天也要稳稳拿下!
2023-10-06 11:30:26
今天早上,突发奇想,想要在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题目,并分享我的刷题经验。希望大家能够和我一起学习,共同进步!