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
Yorum Gönder