LeetCode题解(2)两数相加 - Go语言中文社区

LeetCode题解(2)两数相加


LeetCode题解(2)两数相加

问题

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 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

后记

本题也可以用递归来解.请自行尝试

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41810846/article/details/113730482
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢