T2 两数相加

桌桌 2022-8-12 64 8/12

用类似于加法器的思想,从低位加起,得到前一位的进位acc加在后一位上,计算得到当前的数字num和进位acc。对于比较小的数,高位进行判断是否存在,不存在就用0代替。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
   def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
       len1 = len(l1)
       len2 = len(l2)
       mlen = max(len1, len2)
       res = []
       if operator.eq(l1, [0]):
           return l2
       if operator.eq(l2, [0]):
           return l1
       t = l1[0] + l2[0]
       num = t % 10
       acc = math.floor(t / 10)
       res.insert(0, num)
       for i in range(1, mlen+1):
           if i >= len1:
               num1 = 0
           else:
               num1 = l1[i]
           if i >= len2:
               num2 = 0
           else:
               num2 = l2[i]
           if i == mlen:
               if acc == 0:
                   return res
               else:
                   res.insert(i,1)
                   return res
           else:
               t = num1 + num2 + acc
               num = t % 10
               acc = math.floor(t / 10)
               res.insert(i, num)

执行代码后出现如下错误:

T2 两数相加

看了下发现这个listNode是题目中定义的数据结构,需要用其中所给的结构进行解题,好家伙直接百搭。

还是按照之前的思路,不过用的是题目中的数据结构,而且也不得到长度了,根据指针是否为空acc是否为0进行操作:如果当前两个指针都为空,说明两个链表都遍历过了,所以只需要看acc是否为1,如果为1说明有进位,需要再多用一个结点,为0直接结束。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
   def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
       pnode1 = l1
       pnode2 = l2
       acc = 0
       num1 = pnode1.val
       num2 = pnode2.val
       
       t = num1 + num2 + acc
       num = t % 10
       acc = math.floor(t / 10)
       headNode = ListNode(num, None)
       newNode = headNode
       lastNode = newNode
       print(headNode)
       pnode1 = l1.next
       pnode2 = l2.next
​
       while pnode1 is not None or pnode2 is not None or acc != 0:
           if pnode1 is None and pnode2 is None:
               newNode = ListNode(1, None)
               lastNode.next = newNode
               return headNode
​
           # 得到l1 l2对应的val值num1 num2,由于可能会有None的情况出现,对于None,num的值为0就可以
           if pnode1 is None and pnode2 is not None:
               num1 = 0
               num2 = pnode2.val
           if pnode1 is not None and pnode2 is None:
               num1 = pnode1.val
               num2 = 0
           if pnode1 is not None and pnode2 is not None:
               num1 = pnode1.val
               num2 = pnode2.val

           t = num1 + num2 + acc
           num = t % 10
           acc = math.floor(t / 10)
​
           newNode = ListNode(num, None)
           lastNode.next = newNode
           lastNode = newNode
​
           if pnode1 is None:
               pnode1 = None
           else:
               pnode1 = pnode1.next
           if pnode2 is None:
               pnode2 = None
           else:
               pnode2 = pnode2.next
​
       return headNode

在写出这段通过代码前我出了几个小错误:

1 判断条件复制粘贴结果出了错(真的得自己一个个敲啊,偷懒是有代价的T_T)

2 pnode->pnode.next的时候,没有考虑到可能当前就是None,不存在next属性,也就不能出现pnode.next的写法

- THE END -

桌桌

8月16日01:09

最后修改:2022年8月16日
0

非特殊说明,本博所有文章均为博主原创。