Leetcode, Add Two Numbers Problemi Çözümü (Python)

Sorunun özeti

Soruda, iki tane pozitif integer'ı temsil eden iki linked list veriliyor. listedeki her öğe bir basamağı temsil ediyor ve listedeki sayıların dizilişi ters. Yani temsil ettiği sayı 234 iken liste [4,3,2] şeklinde. İki sayının toplanıp linked list olarak döndürülmesi isteniyor.

Sorunun ilk hali

# 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]:

Önce değerleri bir listeye alıyorum

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        l1Vals=[]
        temp = l1
        while(temp):
            l1Vals.append(temp.val)
            temp = temp.next
        
        l2Vals=[]
        stemp=l2
        while(stemp):
            l2Vals.append(stemp.val)
            stemp=stemp.next

Ardından, listeleri tek bir integer yapabilmek için önce tüm sayıları Stringe dönüştürüp sonrasında da bu String listesini birleştirerek sayıların ters halini String tipinde elde etmiş oluyorum.

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        l1Vals=[]
        temp = l1
        while(temp):
            l1Vals.append(temp.val)
            temp = temp.next
        
        l2Vals=[]
        stemp=l2
        while(stemp):
            l2Vals.append(stemp.val)
            stemp=stemp.next
        
        l1ValsAsStrings = [str(integer) for integer in l1Vals]
        
        l2ValsAsStrings = [str(integer) for integer in l2Vals]
        
        l1AsString = "".join(l1ValsAsStrings)
        
        l2AsString = "".join(l2ValsAsStrings)

Sayılar ters olduğu için düzelterek integer tipinde topluyorum.

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        l1Vals=[]
        temp = l1
        while(temp):
            l1Vals.append(temp.val)
            temp = temp.next
        
        l2Vals=[]
        stemp=l2
        while(stemp):
            l2Vals.append(stemp.val)
            stemp=stemp.next
        
        l1ValsAsStrings = [str(integer) for integer in l1Vals]
        
        l2ValsAsStrings = [str(integer) for integer in l2Vals]
        
        l1AsString = "".join(l1ValsAsStrings)
        
        l2AsString = "".join(l2ValsAsStrings)
        
        l1l2ReverseSum = int(l1AsString[::-1])+int(l2AsString[::-1])

Toplamı elde ettim. Bunu tekrar ters çevirip rakamlardan yeni bir linked list oluşturup döndürmek geriye kalıyor.

l1l2ReverseSum = int(l1AsString[::-1])+int(l2AsString[::-1])
        
        l1l2ReverseSumString = str(l1l2ReverseSum)
        
        l1l2SumStringReversed = l1l2ReverseSumString[::-1]
        
        head=ListNode(int(l1l2SumStringReversed[0]),None)
        htemp=head
        for i in l1l2SumStringReversed[1:]: 
            htemp.next =ListNode(int(i),None)
            htemp = htemp.next
        
        return head

l1l2SumStringReversed, döndürmem gereken linkedlistteki sayının String hali. Stringin ilk indeksindeki sayı ile next'i None yaparak(sonrasında döngüyle bağlıyorum) bir head oluşturuyorum. Sonra geçici bir değişken (htemp) oluşturup döngü ile kalan bütün rakamlardan linked list düğümü oluşturup bunları birbirine bağlıyorum.

# 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]:
        l1Vals=[]
        temp = l1
        while(temp):
            l1Vals.append(temp.val)
            temp = temp.next
        
        l2Vals=[]
        stemp=l2
        while(stemp):
            l2Vals.append(stemp.val)
            stemp=stemp.next
        
        l1ValsAsStrings = [str(integer) for integer in l1Vals]
        
        l2ValsAsStrings = [str(integer) for integer in l2Vals]
        
        l1AsString = "".join(l1ValsAsStrings)
        
        l2AsString = "".join(l2ValsAsStrings)
        
        l1l2ReverseSum = int(l1AsString[::-1])+int(l2AsString[::-1])
        
        l1l2ReverseSumString = str(l1l2ReverseSum)
        
        l1l2SumStringReversed = l1l2ReverseSumString[::-1]
        
        head=ListNode(int(l1l2SumStringReversed[0]),None)
        htemp=head
        for i in l1l2SumStringReversed[1:]: 
            htemp.next =ListNode(int(i),None)
            htemp = htemp.next
        
        return head
        
        

Yorumlar