链表和数组
Linked List and array
我知道 Whosebug 不会写问题并获取答案站点,但这是我的 leetcode 问题。
l1 = input()
l2 = input()
def f(x): #Gives reversed of linkedlist ex. [2, 4, 3] return 342
a, u = 0, 0
for ele in x:
if ele.isnumeric():
a += int(ele)*(10**u)
u += 1
return a
l = list(int(i) for i in str(f(l1) + f(l2)))
print(list(reversed(l)))
这个问题是 leet code problem 所以我在这里解决了这个问题,但这是不同的,他们不希望逗号后的数字之间有空格。
输入:[2,4,3]
[5,6,4]
我的输出:
[7, 0, 8]
预期输出:[7,0,8]
不过,我也试过了
k = str(f(l1) + f(l2))
print("[" + ",".join(str(k)[::-1]) + "]")
这只是列表的默认表示,每个逗号后有一个 space
x = [1, 2, 3]
print(x) # [1, 2, 3] type is list
print(str(x).replace(" ", "")) # [1,2,3] type is str
你不应该在 leetcode 上使用 input() 和 print()
当你开始一道题时,他们会给你一个你必须填写的函数和 return 结果。
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
#put your code here
return the_result
这道题应该使用节点定义为
的链表
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
这应该是您应该编码的 addTwoNumbers()
方法的输入。
但不知何故,通过使用 input()
,您可以绕过它并获取原始列表。
此外,打印(标准输出)不是 leetcode 系统正在评估的内容,它们寻找 addTwoNumbers()
的输出,在本例中为空白。
这是完整的解决方案;
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def __init__(self):
self.head = None
def rev(self, ls):
res = []
self.head = ls
while self.head:
res.append(str(self.head.val))
self.head = self.head.next
return list(reversed(res))
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
res1 = int(''.join(self.rev(l1)))
res2 = int(''.join(self.rev(l2)))
res3 = str(res1 + res2)
resls = list(reversed([i for i in res3]))
self.head = ListNode(resls[0], None)
finalres = self.head
for i in range(1, len(resls)):
lsn = ListNode(resls[i], None)
finalres.next = lsn
finalres = finalres.next
return self.head
**Explanation**:
我假设您了解链表的基础知识,即它们是什么(如果您有困惑,请发表评论)。
所以在解决方案 class 中,我只是在其 __init__
方法中定义了一个 self.head 属性,我将使用它来跟踪链表中的元素。它最初设置为 None,因为那里我们没有任何数据。
然后我定义了一个rev方法来反转给定的链表。
在 rev 中,我创建了一个空列表 res 来存储提供的链接列表中的数据。
Rev 也将链表作为参数,因为我将从中获取数据并将其附加到 res 列表
所以我把 self.head 等于我们调用该方法时提供的链表 ls。
然后我简单地 运行 一个 while 循环直到 self.head 被定义(即,直到它不是 None,这意味着仍然有数据)。
每次迭代后,我不断将self.head更改为self.head。next在链表中向前移动并从该链表的每个节点获取数据并将其附加到res列表。
最后我只是return编辑了反转的res.
然后我定义了另一个方法,addTwoNumbers,它接受两个链表,return根据要求求和。
首先,我需要这两个链表为整数形式并反转(根据条件)。所以我使用 rev 方法来反转它们,使用 join 方法(python 中的内置方法来连接字符串列表)将列表转换为字符串,然后使用 int 方法将字符串转换为 int。
我对两个链表都做了同样的操作,并分别将它们存储在 res1 和 res2 中。
然后我将它们的和 (res3) 转换为字符串,因为我们不能遍历整数。
然后我将 res3 转换为反向列表。
现在是最后一步,return整个事情作为一个列表节点。
所以我简单地创建了一个 ListNode 的实例;
self.head = ListNode(resls[0], None)
这将创建一个 ListNode 实例,其中数据作为 resls 的第一个元素,下一个元素为 none。
然后我将它存储在另一个变量中以引用同一个实例并且不更改它。
然后运行对剩余元素进行远循环并继续添加数据和下一个。
希望你明白。谢谢
我知道 Whosebug 不会写问题并获取答案站点,但这是我的 leetcode 问题。
l1 = input()
l2 = input()
def f(x): #Gives reversed of linkedlist ex. [2, 4, 3] return 342
a, u = 0, 0
for ele in x:
if ele.isnumeric():
a += int(ele)*(10**u)
u += 1
return a
l = list(int(i) for i in str(f(l1) + f(l2)))
print(list(reversed(l)))
这个问题是 leet code problem 所以我在这里解决了这个问题,但这是不同的,他们不希望逗号后的数字之间有空格。
输入:[2,4,3] [5,6,4]
我的输出: [7, 0, 8]
预期输出:[7,0,8]
不过,我也试过了
k = str(f(l1) + f(l2))
print("[" + ",".join(str(k)[::-1]) + "]")
这只是列表的默认表示,每个逗号后有一个 space
x = [1, 2, 3]
print(x) # [1, 2, 3] type is list
print(str(x).replace(" ", "")) # [1,2,3] type is str
你不应该在 leetcode 上使用 input() 和 print()
当你开始一道题时,他们会给你一个你必须填写的函数和 return 结果。
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
#put your code here
return the_result
这道题应该使用节点定义为
的链表# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
这应该是您应该编码的 addTwoNumbers()
方法的输入。
但不知何故,通过使用 input()
,您可以绕过它并获取原始列表。
此外,打印(标准输出)不是 leetcode 系统正在评估的内容,它们寻找 addTwoNumbers()
的输出,在本例中为空白。
这是完整的解决方案;
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def __init__(self):
self.head = None
def rev(self, ls):
res = []
self.head = ls
while self.head:
res.append(str(self.head.val))
self.head = self.head.next
return list(reversed(res))
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
res1 = int(''.join(self.rev(l1)))
res2 = int(''.join(self.rev(l2)))
res3 = str(res1 + res2)
resls = list(reversed([i for i in res3]))
self.head = ListNode(resls[0], None)
finalres = self.head
for i in range(1, len(resls)):
lsn = ListNode(resls[i], None)
finalres.next = lsn
finalres = finalres.next
return self.head
**Explanation**:
我假设您了解链表的基础知识,即它们是什么(如果您有困惑,请发表评论)。
所以在解决方案 class 中,我只是在其 __init__
方法中定义了一个 self.head 属性,我将使用它来跟踪链表中的元素。它最初设置为 None,因为那里我们没有任何数据。
然后我定义了一个rev方法来反转给定的链表。
在 rev 中,我创建了一个空列表 res 来存储提供的链接列表中的数据。
Rev 也将链表作为参数,因为我将从中获取数据并将其附加到 res 列表
所以我把 self.head 等于我们调用该方法时提供的链表 ls。
然后我简单地 运行 一个 while 循环直到 self.head 被定义(即,直到它不是 None,这意味着仍然有数据)。
每次迭代后,我不断将self.head更改为self.head。next在链表中向前移动并从该链表的每个节点获取数据并将其附加到res列表。
最后我只是return编辑了反转的res.
然后我定义了另一个方法,addTwoNumbers,它接受两个链表,return根据要求求和。
首先,我需要这两个链表为整数形式并反转(根据条件)。所以我使用 rev 方法来反转它们,使用 join 方法(python 中的内置方法来连接字符串列表)将列表转换为字符串,然后使用 int 方法将字符串转换为 int。
我对两个链表都做了同样的操作,并分别将它们存储在 res1 和 res2 中。
然后我将它们的和 (res3) 转换为字符串,因为我们不能遍历整数。
然后我将 res3 转换为反向列表。
现在是最后一步,return整个事情作为一个列表节点。
所以我简单地创建了一个 ListNode 的实例;
self.head = ListNode(resls[0], None)
这将创建一个 ListNode 实例,其中数据作为 resls 的第一个元素,下一个元素为 none。
然后我将它存储在另一个变量中以引用同一个实例并且不更改它。
然后运行对剩余元素进行远循环并继续添加数据和下一个。
希望你明白。谢谢