美文网首页
Add_Two_Numbers python 求解

Add_Two_Numbers python 求解

作者: vckah | 来源:发表于2018-03-12 22:44 被阅读0次

    leetcode 传送门
    例子:

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

    大体意思就是从前向后做加法,逢十进一。
    在评论区找到的一个代码:

    class Solution(object):
        def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            carry = 0    # 进位符
            root = n = ListNode(0)
            while l1 or l2 or carry:
            # 只要 l1 l2 都不为空才进行操作,否则直接返回 0
                v1 = v2 = 0
                if l1:
                    v1 = l1.val
                    l1 = l1.next
                if l2:
                    v2 = l2.val
                    l2 = l2.next
                carry, val = divmod(v1+v2+carry, 10)
                n.next = ListNode(val)
                n = n.next
            return root.next    # 这步一定要仔细理解
    

    divmod() 函数返回的是商和余数构成的元组。
    例如 a, b = divmod(6, 3) 就是 6除以3, a = 2, b = 0

    这道题涉及到链表的知识,我想用 C 解答起来会稍微容易理解一点。对于 python,主要的是理解链表的构造。

     class ListNode(object):
         def __init__(self, x):
             self.val = x
             self.next = None
    

    使用这个类来构造一个链表

    idx = ListNode(3)
    n = idx
    n.next = ListNode(4)
    n = n.next
    n.next = ListNode(5)
    n = n.next
    print(idx.val,idx.next.val,idx.next.next.val)
    
    测试.png

    其实感觉 python 做这种数据结构对于理解链表来说还是有帮助的,但是相较于 C 代码, python 的代码还是难以理解的。

    相关文章

      网友评论

          本文标题:Add_Two_Numbers python 求解

          本文链接:https://www.haomeiwen.com/subject/sonofftx.html