【发布时间】:2020-11-16 06:08:15
【问题描述】:
返回列表内的列表(不需要)
我不断返回列表中的列表,用于以下 LeetCode 问题257. Binary Tree Paths,这不是问题想要的。我在解决遍历问题时似乎总是遇到这个问题。
这是我当前的解决方案及其输出。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def binaryTreePaths(self, root: TreeNode, val: str="") -> List[str]:
if not root:
return ""
val += str(root.val) + "->"
if not root.left and not root.right:
return val[:-2]
return [path for path in [self.binaryTreePaths(root.left, val), self.binaryTreePaths(root.right, val)] if path]
输入: [1,2,3,null,5]
输出: [["1->2->5"],"1->3"]
预期: ["1->2->5","1->3"]
我尝试过的事情
- 创建 res 变量并使用 res.extend()
res = []
res.extend(path for path in [self.binaryTreePaths(root.left, val), self.binaryTreePaths(root.right, val)] if path)
- 使用附加而不是扩展以及条件来尝试过滤掉不需要的元素。
我在解决遍历问题时经常遇到这个问题,所以如果这里有人有解决方案以及一些关于如何培养对这里出了什么问题的直觉以及如何在未来,我将非常感谢您的帮助。
编辑
好吧,我一直在努力尝试修复我的解决方案,大约 20 分钟后,我想出了以下可憎的事情。
class Solution:
def binaryTreePaths(self, root: TreeNode, val: str="") -> List[str]:
if not root:
return ""
val += str(root.val) + "->"
if not root.left and not root.right:
return val[:-2]
r1 = self.binaryTreePaths(root.left, val)
r2 = self.binaryTreePaths(root.right, val)
if isinstance(r1, str):
r1 = [r1]
if isinstance(r2, str):
r2 = [r2]
for i in r1:
if i == "":
r1.pop(r1.index(i))
for i in r2:
if i == "":
r2.pop(r2.index(i))
return r1 + r2
我对我的解决方案一点也不满意,所以如果您知道更干净的解决方案,请继续发布您的解决方案/建议。
【问题讨论】:
-
binaryTreePaths返回一个列表,所以return [path for path in [self.binaryTreePaths]]返回一个列表内的列表。使用itertools.chain -
当您不返回列表时,问题就开始了。
标签: python python-3.x list return