Path Sum III

twisted-fate發表於2019-06-03

這題給我的教訓太深了 , 如果一道題相對太難太複雜 , 沒有完整的思路 , 千萬千萬千萬不要用過程化的方式寫虛擬碼 ,這樣是一直在滿足特殊情況的修修補補,最後寫出一堆垃圾程式碼只能刪掉 , 先放寬條件 , 解決簡單的問題 , 再一步步思考
還有, 這種題要先畫圖 別做跳過去直接寫虛擬碼的蠢事

how to solve it 應該是本很好的書 , 做裡面的題 ? 這本做完以後感覺可以去當老師了XD

暗時間裡提到的其他書也可以看下

Path Sum III

Path Sum III

Path Sum III


func pathSum(root *TreeNode, sum int) int {
    if root==nil {
        return 0
    }
    res:=0
    res+=findPath(root,sum)
    if root.Left!=nil {
        res+=pathSum(root.Left,sum)
    }
    if root.Right!=nil {
        res+=pathSum(root.Right,sum)
    }
    return res
}

func findPath(node *TreeNode, sum int) int {
    if node==nil {
        return 0
    }
    res:=0
    if sum-node.Val==0 {
        res+=1
    }
    res+=findPath(node.Left,sum-node.Val)
    res+=findPath(node.Right,sum-node.Val)
    return res

}
pathSum(node,sum) {
    if node nil {
        return 0
    }
    res=0
    res+=findPath(node,sum)
    if left
        res+=pathSum(left,sum)
    if right
        res+=pathSum(right,sum)

    return res
}

findPath(node,sum) {
    if node nil {
        return 0
    }

    res=0
    if sum-node.v==0 {
        res+=1
    }

    res+=findPath(node,sum-node.v)
    return res
}

錯誤的過程化思考方式

global res=0

findPathsIn(node,sum) {

    if sum-node.v==0 {
        res++

        return
    }
    if sum-node.v<0 {
        if node has left child {
            findPathsIn(node.left,sum)
        }
         if node has right child {
            findPathsIn(node.right,sum)
        }
        return
    }

    if sum-node.v>0 {
        if node has left child {
            findPathsIn(node.left,sum-node.v)
        }
         if node has right child {
            findPathsIn(node.right,sum-node.v)
        }   

            return

    }

}

寫出來的垃圾程式碼

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章