LeetCode(2023-12-05)


958. 二叉树的完全性检验

958. 二叉树的完全性检验

class Solution:
    def __init__(self):
        self.level = 0
        self.able2change = True

    def isCompleteTree(self, root: Optional[TreeNode]) -> bool:
        node = root
        while node:
            self.level += 1
            node = node.left
        return self.dfs(root, 0)

    def dfs(self, node, level):
        if node is None:
            return self.check_level(level)
        ret = self.dfs(node.left, level + 1)
        if not ret:
            return False
        ret = self.dfs(node.right, level + 1)
        if not ret:
            return False
        return True

    def check_level(self, level):
        if level == self.level:
            return True
        if self.level - level == 1 and self.able2change:
            self.level = level
            self.able2change = False
            return True
        return False

201. 数字范围按位与

201. 数字范围按位与

import math


class Solution:
    def rangeBitwiseAnd(self, left: int, right: int) -> int:
        if left == 0 or right == 0:
            return 0
        ans = 0
        while left != 0 and right != 0:
            left_p = int(math.log(left, 2))
            right_p = int(math.log(right, 2))
            if left_p != right_p:
                return ans
            ans |= 1 << left_p
            left = left & ~(1 << (left.bit_length() - 1))
            right = right & ~(1 << (right.bit_length() - 1))
        return ans

154. 寻找旋转排序数组中的最小值 II

154. 寻找旋转排序数组中的最小值 II


class Solution:
    def findMin(self, nums: List[int]) -> int:
        left = 0
        right = len(nums) - 1
        if nums[right] > nums[left]:
            return nums[left]
        while left < right:
            mid = left + (right - left) // 2
            if nums[right] > nums[left]:
                return nums[left]
            if nums[mid] < nums[left]:
                right = mid
                left += 1
            elif nums[mid] > nums[left]:
                left = mid + 1
            else:
                left += 1
        return nums[left]

26. 删除有序数组中的重复项

26. 删除有序数组中的重复项

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        p = 1
        last_num = nums[0]
        for i in range(1, len(nums)):
            if last_num == nums[i]:
                continue
            last_num = nums[i]
            nums[i], nums[p] = nums[p], nums[i]
            p += 1
        return p

341. 扁平化嵌套列表迭代器

341. 扁平化嵌套列表迭代器

from collections import deque


class NestedIterator:
    def __init__(self, nestedList: [NestedInteger]):
        self.chain = deque(self.expand(nestedList))

    def expand(self, nestedlist):
        ans = []
        for i in range(len(nestedlist)):
            if nestedlist[i].isInteger():
                ans.append(nestedlist[i])
            else:
                ans.extend(self.expand(nestedlist[i].getList()))
        return ans


    def next(self) -> int:
        return self.chain.popleft().getInteger()

    def hasNext(self) -> bool:
        return bool(self.chain)

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - LeetCode(2023-12-05)


我的朋友,理论是灰色的,而生活之树是常青的!