Leetcode_02【两数相加】——【难度:中】
文章目录:
- 题目
- 脚本一
- 脚本逻辑分析
题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
脚本一:【耗时80ms】
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: str1 = "" str2 = "" first = l1 second = l2 while first != None: str1 += str(first.val) first = first.next while second != None: str2 += str(second.val) second = second.next str3 = str1[::-1] str4 = str2[::-1] n1 = int(str3) + int(str4) str5 = str(n1) str6 = str5[::-1] len1 = len(str6) l3 = ListNode(0) l3.next = l1 third = l3 for i in range(len1): bb = ListNode(int(str6[i])) third.next = bb third = third.next l3 = l3.next return(l3)
脚本逻辑分析:
- 此题涉及单链表的知识,在此笔者做简单的介绍:单链表的特点是当前节点会记录本节点的值,并指向下一节点,即通过拥有val和next的属性;
- 举一个例子:l1 = 2 -> 4 -> 3(不能如此赋值,只是为了演示方便),即l1是一个3节点的单链表;如果l1 = l1.next 那么等同于l1 = 4 -> 3;所以节点的移动和赋值通常由中间变量来进行;如:first=l1,此时first和l1均指向同一个链表,first.val = 5 表示修改当前节点的值为5,此修改会影响l1的链表,因为l1和first均指向同一个链表;first = first.next,此时first = 4 -> 3【此时first的链表也是l1链表的一部分,修改first的值也就是修改l1的值】
- 由题目可知:题目将两加数反转变为链表的形式,脚本的逻辑是先把两加数还原并相加,然后将两数之和字符串化,再通过链表的方式将和中的每个值赋予链表;接着去掉多余的链表头节点即可