社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
因为列表的第一个数是个数,因此,我们按照加法的运算公式可得,只要从第一个数开始,逐项相加即可
这里要注意思:加入结果的是num1 + num2 + flag % 10
进位flag = num1 + num2 + flag // 1
两个合在一起可以写成:
flag, num = divmod(num1 + num2 + flag, 10)
说明:
divmod(x, y)
第一个参数是被除数,第二个参数是除数
返回值为: 商, 余数
当两个列表的数位不一样长的时候,短的数位设置为0,直到两个列表都清空了为止
要注意:当我们求完最后一位的时候,要考虑进位里还有没有值.如果还有进位,要把进位加入结果集中
# 作者:爱编程的章老师
# leetcode题解
# day02
# ListNote的定义
class ListNote:
def __init__(self, value=0, next = None):
self.val = value
self.next = next
def add_two_nums(l1:ListNote, l2:ListNote):
flag = 0 # 始化化进位标识
ans = None # 答案初始化为空
note = None # 节点初始为空
# 检测数据是否处理完毕
while l1 or l2:
# l1长度不足,则第一个加数补0
num1 = l1.val if l1 else 0
# l2长度不足,则第二个加数补0
num2 = l2.val if l2 else 0
# l1长度不足设为None, 否则取下一个值
l1 = l1.next if l1 else None
# l2长度不足设为None, 否则取下一个值
l2 = l2.next if l2 else None
# 获取当次的值与进位
flag, num = divmod(num1 + num2 + flag, 10)
# 将结果加入列表
if ans:
note.next = ListNote(num)
note = note.next
else:
ans = ListNote(num)
note = ans
# 算完以后,要检测进位里还有没有
if flag:
note.next = ListNote(flag)
return ans
本题也可以用递归来解.请自行尝试
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!