栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

(Python)LeetCode 2:两数相加

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(Python)LeetCode 2:两数相加

知识点:

这里考察到了Python中的结构体,ListNode结构体构造如下:

 Definition for singly-linked list.
 class ListNode:
     def __init__(self, val=0, next=None):
         self.val = val
         self.next = next

包含了数值和指向下一个块的指针。

Python中的链表和C++的链表的使用有所不同,Python中的更加简单一些,只需要一个变量指向结点即可,用ListNode(0)创建一个新的结点。

问题分析:

题目中是将所有的数逆序存储到一个链表中,最后要求将结果也逆序存储到一个列表中,实际上这里的逆序反而给我们了很多的方便,我们只需要按照每一个位的相加,然后进位,继续往后算即可,也就是相当于从个位、十位、百位、、、、这样计算下去。需要注意的点就是考虑是否需要进位,本位上最后放什么数。如果两个相加的数的结点已经结束,但是需要进位的话则需要另外创建一个新的结点来存储这个进位的值。(这里我一开始就出错了)

实现的源代码如下:

class Solution:
    def addTwonumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        carry = 0  # 用作进位
        node = ListNode(0);  # 创建一个新的listnode结点
        tmp = node;  # tmp指向这个结点(用作移动的指针)
        while (True):
            if l1 != None:
                sum1 = l1.val
                l1 = l1.next
            else:
                sum1 = 0
            if l2 != None:
                sum2 = l2.val
                l2 = l2.next
            else:
                sum2 = 0
            print(sum1, sum2, carry)
            modulo = (carry + sum1 + sum2) % 10
            print('modulo', modulo)
            tmp.val += modulo
            carry = int((carry + sum1 + sum2) / 10)
            print('carry', carry)
            if l1!=None or l2 !=None or carry!=0:
                tmp.next = ListNode(0)
                tmp = tmp.next
            else:
                break
        return node

关于LeetCode的解题方法 欢迎大家一起讨论~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/461507.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号