博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode By Python] 2 Add Two Number
阅读量:4058 次
发布时间:2019-05-25

本文共 2444 字,大约阅读时间需要 8 分钟。

先放题目

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0 -> 8Explanation: 342 + 465 = 807.

解释:

题意:存在两个非负整数,数字以相反的顺序存储,每一个节点表示一个数字,添加两个数字,并使其相加答案作为链表输出

输入输出:

上述例子表示342+465=807,第一次输入2,5,输出为7,第二次输入4,6,相加为10,取个位输出为0,第三次输入3,4,输出为8,包括3+4和第二次输入结果的十位数1。

代码:

class Solution(object):    def addTwoNumbers(self, l1, l2):        """        :type l1: ListNode        :type l2: ListNode        :rtype: ListNode        """        resultnode = None #将每次输入结果先存储为空节点        add = 0   #表示进位的结果,如上述输入输出中的十位数1        while True:  #这里是为了简化计算,由于是两个非负数相加,如果为2345+345,则两个链表长度不一致,这时将345末尾补0,当两条链表末尾都是-1时,表示运算结束            if l1.val == -1:                l1.val = 0            if l2.val == -1:                l2.val = 0                        tSum = (l1.val + l2.val + add) % 10 #表示两位数相加,取个位数            add = (l1.val + l2.val + add) / 10  #若存在进位,更新add的值            listn = ListNode(tSum)  #将tSum记录进链表,这里的ListNode是LeetCode以存在的函数,将tSum转化为节点            if resultnode ==None:  #如果结果为空时,直接存储在链表中                resultnode = listn                flagnode = resultnode            else:                   #如果结果不为空时,存储在下一个节点中                flagnode.next = listn                flagnode = flagnode.next                        if l1.next != None:#当链表下一个节点不为空时,更新l1(l2)的值,否则存储为空,当均为空时,直接退出函数                l1 = l1.next            else:                l1.val = -1            if l2.next != None:                l2 = l2.next            else:                l2.val = -1                        if l1.val == -1 and l2.val == -1:                break        if add != 0 :            #处理进位值,如最后值为7+8,则需要增加一个节点存储进位值            listn = ListNode(add)            flagnode.next = listn        return resultnode
调试代码:

if __name__=='__main__':    print "-------------start-------------"    l1_1 = ListNode(2)    l1_2 = ListNode(4)    l1_3 = ListNode(3)    l1_1.next = l1_2    l1_2.next = l1_3    l2_1 = ListNode(5)    l2_2 = ListNode(6)    l2_3 = ListNode(4)    l2_1.next = l2_2    l2_2.next = l2_3    l3_1 = Solution().addTwoNumbers(l1_1,l2_1)    while l3_1 != None:        print l3_1.val        l3_1 = l3_1.next
输出结果:

python leetcodetest.py-------------start-------------708

转载地址:http://vwhci.baihongyu.com/

你可能感兴趣的文章
gdb debug tips
查看>>
linux和windows内存布局验证
查看>>
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
01Java基础语法-16. while循环结构
查看>>
Django框架全面讲解 -- Form
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>
”舍得“大法:把自己的优点当缺点倒出去
查看>>