递归的原则和思路
递归中我们会
1)明确定义问题与可以被分解的子问题,
2)假设子问题可以被解决,考虑如何把子问题合并解决原问题,
3)明确递归终止/边境条件。我们可以看到递归问题的解决只是比Contract design多需要思考如何终止递归 3)这一步骤,逻辑上它们非常一致。下面我拿leetcode的两个不同难度的题举例说明一下,解释都在leetcode discussion的comment里。
LC 114. Flatten Binary Tree to Linked List (Medium)
Solution
LC 124. Binary Tree Maximum Path Sum (Hard)
Solution
在这个过程中,有个点应该值得参考。
在考虑子问合并解决原问题时不要去考虑递归终止条件。把注意力集中在“假设我能够通过call这个递归函数解决子问题,我怎么能通过子问题解决原问题”。例如LC114中,要关注的问题是假设我已经能把左子树或者右子树flatten,我如何把flatten好的链表组合起来形成符合要求的新链表。

浙公网安备 33010602011771号