两数相加(B站看视频总结)
Posted hany-postq473111315
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两数相加(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
以上是关于两数相加(B站看视频总结)的主要内容,如果未能解决你的问题,请参考以下文章