1. 程式人生 > 其它 >LeetCode騰訊精選練習50——第九天

LeetCode騰訊精選練習50——第九天

技術標籤:LeetCode資料結構二叉樹leetcodepython

題目88:合併兩個有序陣列
給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為一個有序陣列。
初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。你可以假設 nums1 有足夠的空間(空間大小等於 m + n)來儲存 nums2 中的元素。
題解:

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None
: """ Do not return anything, modify nums1 in-place instead. """ nums1[:] = sorted((nums1[:m] + nums2[:n]))

執行結果:
在這裡插入圖片描述
題目89:格雷編碼
格雷編碼是一個二進位制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。
給定一個代表編碼總位數的非負整數 n,列印其格雷編碼序列。即使有多個不同答案,你也只需要返回其中一種。
格雷編碼序列必須以 0 開頭。
題解:(還可以考慮位操作)

class Solution:
    def grayCode(self, n: int) -> List[int]:
        if n == 0:
            return [0]
        res = [0, 1]       # 末位數字分別為0,1時表示的結果
        for i in range(1,n):
            for num in res[::-1]: # 保證與前面只有一位不同
                res.append(2**i+num)
        return res

執行結果:
在這裡插入圖片描述
題目104:二叉樹的最大深度

給定一個二叉樹,找出其最大深度。
二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
題解:

# 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 maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        self.ans = 0
        self._dfs(root, 0)
        return self.ans

    def _dfs(self, node, level):
        if not node:
            return
        if self.ans < level + 1:
            self.ans = level + 1
        self._dfs(node.left, level + 1)
        self._dfs(node.right, level + 1)

執行結果:
在這裡插入圖片描述