关于Contract First API Design,这个link可以给大家一些介绍。总结起来就是在coding之前要 1)把问题拆成明确的子模块,并 2)用明确的Contract(合约)描述各个模块API接口提供的功能。这一点和算法中的递归概念不谋而合。在递归中我们会 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