描述
- 您将获得两个代表两个非阴性整数的链接列表。
- 数字存储在反向顺序中,
- 他们的每个节点都包含一个数字。
-
添加两个数字,然后将总和作为链接列表返回。
-
您可以假设两个数字不包含任何领先零,除了数字0本身。
**Input:** l1 = [2,4,3], l2 = [5,6,4]
**Output:** [7,0,8]
**Explanation:** 342 + 465 = 807.
- 约束:
- 每个链接列表中的节点数在范围内。
0 <= Node.val <= 9
- 可以保证列表代表一个没有领先零的数字。
问题定义
- 函数:添加两个数字
- 输入:List1,链接列表,List2,链接列表
- 先进:0 <| List1 | <100,|列表2 | > 0,0â€node.valueâ€9,0
- 输出:总和,链接列表
- 后解决方案:
。 。态 > mi> s u â 1 ] 1 1 £ i i s t 1 1 = x 1l l /mi> i s s 1 [ 0 ] x0 00 i > s t 1 [ 1 < mo strendy =“ false”>] â 1 00 1 1。 。 。。 l is t mo strendy =“ false”> [“ mi MathVariant =“ normalmal”>£ l i s 1 £ 1 < Mn> Mn> 1> 1> 1 0 £ i i is t 1 > i s t 2 [ ] 1 0 l> l> l> l> l> 1 < mi> is s 2 [false“>” [Mn> 1 ] 1 1 0 01 。 。 。态mn> 2 [ £ l i s st 2 1 10 £ l i s s s s t /mi> 2 £ 1 - 这个问题可以分为两个部分:1。计算两个链接列表的总和2.将总和转换为链接列表。
- 我以递归风格解决了这个问题
第一部分
- 功能:列表的总和
- 输入:list1,链接列表,学位,整数
- 先进:0 <| List1 | <100,0â€node.value€9,0
- 输出:总和,整数
- 后解决方案:
- Let's think about the base case: The lowest possible input is there is only one node in the linked list, which means its next value is None. In this case, we multiply the value of the current pointing node by 10 to the power of nodes we travel
- What about other cases: we multiply the value of the current pointing node by 10 to the power of nodes we travel, I use degree to denote it and + call the function on the next node
- The recursive definition is:
- if n is the last node: node.value x
- otherwise: node.value x + sum of a list(node.value, degree + 1).
- For the complexity, in each recursive call, we calculate the node.value x 10^{degree} which has a complexity of O(\log degree)
- number of recursive call x complexity of each call = . Since the degree is increased by 1 for everyone more linked list, so it is also .
- The code
第二部分
- 本部分是从两个链接列表的总和中创建一个链接列表
- 功能:新链接列表
- 输入:总和,整数
- 先决条件:国际¥0
- 输出:List3,链接列表
- 后解决方案:
算法的轮廓
- 我将从 sum 的最后一个数字开始为一个节点分配一个数字,最后一个数字可以通过剩余的 sum 除以10。我分配了一个数字,我将通过使用地板部门缩短 sum 将最终指针转移到左侧。我必须明确创建一个第一个节点变量才能分配 sum 的最后一个数字,并将其余的 sum 传递给递归函数。<<<<<<<<<<<<<<<< /li>
- 隐居方法的基本案例将是总和。表示总和的最后一位数字。前一种情况是通过创建第一个节点变量来处理的。在后一种情况下,由于 sum 中没有领先0,因此我们不需要分配此0,因此我们将此节点的值分配为无。
- 在其他情况下:我们分配了 sum 的最后一个数字,然后切割 sum 的最后一个数字,然后将node.node.next值分配给下一个节点< /li>
- 递归定义是:
- 如果sum = 0:node.val = none
- 如果sum> 0:
- 当前节点= sum%10
- sum = sum // 10
- 当前node.next =新链接列表(sum)
- 复杂性基本上受 sum 的数字数量的影响,即 . Since sum is larger when the two linked list given in the first place is longer, so this also mean it has a complexity of O(log l list1|).
- The code
组合算法
- 让 sum 是list1的总和和列表2 的总和
- 转换 sum 链接列表
- 让第一个节点是 sum 的链接列表
- 总体复杂性是
机智的班级 - 到弹头kub kub“,mondegroom”)mɔ/// k)mɔ:park trak-。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 olyyalyalyally / to ensah toh,并为Legubides和Hymimass ZobssZabɔ / Qrad)QuankéQuéééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééing-Mlomééééépépépépépéi例ké-kékéick,Mk- humek unek yhyek y yye y hyy yky ykk. yafeks?>要做的食物吗?
感觉
- - 实际上,尽管这是一种缓慢的算法,但我很乐意完成这一挑战。这是第一次,我在课程材料之外成功编写了递归算法。这使我有更多的信心和经验来编写递归算法,我以前对此感到有些困惑。
参考: