Add_Two_Numbers python 求解

2018-03-12  本文已影响0人  vckah

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 的代码还是难以理解的。

上一篇下一篇

猜你喜欢

热点阅读