LeetCode python 递归求解
LeetCode python recursive solution
所以我在 leetcode 讨论中看到了这个解决方案,我无法理解它。
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def addTwoNumbers(self, l1, l2):
def toint(node):
a = node.val if node else 0
print(a) #prints 2 4 3
HERE===> x = node.val + 10 * toint(node.next) if node else 0
print(x) #prints 3 4 2
return x
def tolist(n):
node = ListNode(n % 10)
if n > 9:
node.next = tolist(n / 10)
return node
return tolist(toint(l1) + toint(l2))
a, a.next, a.next.next = ListNode(2), ListNode(4), ListNode(3)
b, b.next, b.next.next = ListNode(5), ListNode(6), ListNode(4)
result = Solution().addTwoNumbers(a, b)
print("{0}, {1}, {2}".format(result.val, result.next.val, result.next.next.val))
我不明白的是,它是如何取一个数字,加 10 然后乘以 next,最后取反。
谁能解释一下我在此处标记的行===>
实际上并没有10的加法和反转。一些多余的括号显示了操作顺序。该行完全等同于
if node:
x = node.val + (10 * toint(node.next))
else:
x = 0
看起来这些链表的头部是最低有效位,因此不需要反转来添加它们。也就是说,这不是预期的解决方案,它利用了 Python 的 bignum,而不是逐个节点地添加值。
所以我在 leetcode 讨论中看到了这个解决方案,我无法理解它。
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def addTwoNumbers(self, l1, l2):
def toint(node):
a = node.val if node else 0
print(a) #prints 2 4 3
HERE===> x = node.val + 10 * toint(node.next) if node else 0
print(x) #prints 3 4 2
return x
def tolist(n):
node = ListNode(n % 10)
if n > 9:
node.next = tolist(n / 10)
return node
return tolist(toint(l1) + toint(l2))
a, a.next, a.next.next = ListNode(2), ListNode(4), ListNode(3)
b, b.next, b.next.next = ListNode(5), ListNode(6), ListNode(4)
result = Solution().addTwoNumbers(a, b)
print("{0}, {1}, {2}".format(result.val, result.next.val, result.next.next.val))
我不明白的是,它是如何取一个数字,加 10 然后乘以 next,最后取反。
谁能解释一下我在此处标记的行===>
实际上并没有10的加法和反转。一些多余的括号显示了操作顺序。该行完全等同于
if node:
x = node.val + (10 * toint(node.next))
else:
x = 0
看起来这些链表的头部是最低有效位,因此不需要反转来添加它们。也就是说,这不是预期的解决方案,它利用了 Python 的 bignum,而不是逐个节点地添加值。