LeetCode題解(0437):計算和爲定值的路徑數(Python)

題目:原題鏈接(簡單)

解法 時間複雜度 空間複雜度 執行用時
Ans 1 (Python) O(n^2) O(n) 7844ms (5.04%)
Ans 2 (Python) O(nlogn) O(n^2) 204ms (79.27%)

LeetCode的Python執行用時隨緣,只要時間複雜度沒有明顯差異,執行用時一般都在同一個量級,僅作參考意義。

解法一(遍歷樹的同時遍歷路徑):

def pathSum(self, root: TreeNode, s: int) -> int:
    self.ans = 0

    def helper(node, source):
        # 處理樹末端的情況
        if node is None:
            return

        # 計算當前路徑
        source.append(node.val)

        # 判斷路徑是否等於目標值
        for i in range(len(source)):
            if sum(source[i:]) == s:
                self.ans += 1

        # 繼續檢查子節點
        if node.left is not None:
            helper(node.left, copy.deepcopy(source))
        if node.right is not None:
            helper(node.right, copy.deepcopy(source))

    helper(root, [])

    return self.ans

解法二(路徑和列表):

def pathSum(self, root: TreeNode, s: int) -> int:
    def helper(node, sums):
        # 處理樹末端的情況
        if node is None:
            return 0

        # 統計當前路徑和列表
        sums = [t + node.val for t in sums] + [node.val]

        # 繼續檢查子節點
        return sums.count(s) + helper(node.left, sums) + helper(node.right, sums)

    return helper(root, [])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章