Python 数组切片是否存在越界

Python 数组切片是否存在越界

今天在刷leetecode时注意到这个问题。
一道关于最小高度树的简单题

# Definition for a binary tree node.
class TreeNode:
     def __init__(self, x):
         self.val = x
         self.left = None
         self.right = None

是一道关于最小高度树的简单题,解题思路很清晰,从root开始顺左右子树递归,不断返回中位数作为新的root直到数组为空。

左右子树的有序数列是通过切片原数组得到的,在最初的实现中,为防止数组越界而后置了条件判断语句:

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        if not len(nums): 
            return 
        mid = len(nums)//2
        root = TreeNode(nums[mid]) 
        root.left = self.sortedArrayToBST(nums[:mid]) if mid > 0 else None
        root.right = self.sortedArrayToBST(nums[mid+1:]) if mid < len(nums) else None
        return root

后来发现python中对数组进行切片时,例如:
len(list) = 5,sub_list = list[4:8],返回的sub_list中实际只包含了list[4],而不是发生数组越界错误。若 sub_list[10:],则返回的是一个空list (注意,不是None)。

故重新简化代码:

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        if not len(nums): 
            return 
        mid = len(nums)//2
        root = TreeNode(nums[mid]) 
        root.left = self.sortedArrayToBST(nums[:mid]) 
        root.right = self.sortedArrayToBST(nums[mid+1:])
        return root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值