[LeetCode] 2.add two number


再エンコードテストの準備
https://leetcode.com/problems/add-two-numbers/
問題の詳細については、以下のWebサイトを参照してください.

に質問


You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
たとえば、2->4->3,5->6->4の接続リストです.
243+564=807で、接続リストを使用して7->0->8の問題としてマークします.

方法


LinkedListを利用した問題だと思います.問題はすでに基本的な等級を与えた.
str()関数とlist()、および
うまく利用すればいい
リンクリストの構造は次のとおりです.
最初は値がなく、接続のみ可能なヘッダノードを作成します.
次に、ヘッダーにカーソル値を指定します.
header.next=newNode()接続する新しいノードを作成します.
作成後、カーソル値をcurr=headerノードとします.nextを使用して移行します.
ノードが作成されると、反転数の初期値がnodeに設定されます.valを挿入します.
これを数値リストの最後の値に繰り返します.
接続リストの最後のnextには値は挿入されません.
戻り先もあるnext
リスト#リスト#

私が書いたコード

# 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: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        answer = ListNode()
        num1 = num2 = ""
        
        while l1:
            num1 += str(l1.val)
            l1 = l1.next
        while l2:
            num2 += str(l2.val)
            l2 = l2.next
        
        sum = str(int(num1[::-1]) + int(num2[::-1]))
    
        sum = sum[::-1]
        curr = answer
        
        for i in range(len(sum)) :
            curr.next = ListNode()
            curr = curr.next
            curr.val = sum[i]
       
        return answer.next

💯 他人が解釈するコード

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        
        def iterate(ll):
            listt = []
            current = ll
            while current != None:
                listt.append(current.val)
                current = current.next
            return listt
        
        list1, list2 = iterate(l1), iterate(l2)
        
        def convert(l):
            s = ''
            for i in l:
                s += str(i)
            integer = int(s[::-1])
            return integer
        
        int1, int2 = convert(list1), convert(list2)
        ans = str(int1+int2)[::-1]
        
        ansl = [int(c) for c in ans ]
        
        cur = dummy = ListNode(0)
        for i in ansl:
            cur.next = ListNode(i)
            cur = cur.next
        return dummy.next 

🧑🏻 ポスト


他の人のやり方でやれば57%も早くなります.
反転を最小化したようです

LinkedListの概念を再復習できる問題のようです.