两数相加(B站看视频总结)

 1 '''
 2 两数相加:
 3     给出两个 非空 的链表用来表示两个非负的整数
 4     各自的位数是按照逆序的方式存储的 每一个节点只能保存 一位数
 5 示例:
 6     输入:(2->4->3) + (5->6->4)
 7     输出:7->0->8
 8     原因:342 + 465 = 807
 9 
10 '''
11 '''
12 class ListNode:
13     def __init__(self,x):
14         # 在类声明时进行调用
15         self.val = x
16         self.next = None
17         # self 指的是自身,在类中声明函数需要添加才可以访问自身元素和其他函数
18 a = ListNode(10086)
19 # print(a,a.val)
20 # <__main__.ListNode object at 0x000001F76D46A148> 10086
21 
22 # # 实现尾部元素指向头部元素
23 # move = a 
24 # for i in range(4):
25 #     temp = ListNode(i)
26 #     # temp 为 ListNode 节点
27 #     move.next = temp
28 #     # move 下面的节点为 temp 
29 #     move = move.next
30 #     # 将节点向下移动
31 # move.next = a
32 # # 重新指向头节点 a 
33 class Solution1:
34     def addTwoNumbers(self,l1:ListNode,l2:ListNode) ->ListNode:
35         res = ListNode(10086)
36         move = res 
37         carry = 0
38         # 进位
39         while l1 != None or l2 != None:
40             if l1 == None:
41                 l1,l2 = l2,l1
42                 # 替换位置,将 l1 作为输出
43             if l2 == None:
44                 carry,l1.val = divmod((l1.val + carry),10)
45                 # 对 l1 进行刷新
46                 move.next = l1
47                 # 设置数据
48                 l1,l2,move = l1.next,l2.next,move.next
49                 # 将数据向下移动
50             else:
51                 carry,l1.val = divmod((l1.val + l2.val + carry),10)
52                 # 如果都不为 None,则对应位置进行相加,然后进行求余
53                 move.next = l1
54                 # 更新数据
55                 l1,move = l1.next,move.next
56                 # 向下移动
57         if carry == 1:
58             move.next = ListNode(carry)
59         return res.next
60 
61 '''
62 class ListNode:
63     def __init__(self,x):
64         # 在类声明时进行调用
65         self.val = x
66         self.next = None
67         # self 指的是自身,在类中声明函数需要添加才可以访问自身元素和其他函数
68 # a = ListNode(10086)
69 
70 # 使用迭代写法
71 class Solution1:
72     def addTwoNumbers(self,l1:ListNode,l2:ListNode) -> ListNode:
73         def recursive(n1,n2,carry = 0):
74             if n1 == None and n2 == None:
75                 return ListNode(1) if carry == 1 else None
76                 # 如果存在进位 则 输出 1
77             if n1 == None:
78                 n1,n2 = n2,n1
79                 # 当 n1 为空时 将位置替换
80                 return recursive(n1,None,carry)
81                 # 进行递归 使用 n1 进行递归
82             if n2 == None:
83                 carry,n1.val = divmod((n1.val + carry),10)
84                 # 返回值为 进位和数值 将 n1 的值进行替换
85                 n1.next = recursive(n1.next,None,carry)
86                 # 对 n1 接下来的数据继续进行调用,更新 n1 链表
87                 return n1
88             carry,n1.val = divmod((v1.val + n2.val + carry),10)
89             # 当不存在空值时,进行相加,更新 n1 值
90             n1.next = recursive(n1.next,n2.next,carry)
91             # 设置 n1 接下来的值为 所有 n1 和 n2 接下来的运算调用
92             return n1 
93         return recursive(l1,l2)
94         # 返回到内部函数中

2020-04-11

猜你喜欢

转载自www.cnblogs.com/hany-postq473111315/p/12682862.html