@ninijia 在 Leetcode每日一题练习 ------ 241. 为运算表达式设计优先级 中发帖
从Leetcode 每日一题练习继续讨论:
241. 为运算表达式设计优先级
241. Different Ways to Add Parentheses
题解
本题算是一道比较典型的递归加记忆化问题, 首先确定终止条件, 当某个子表达式中仅包含数字时, 则直接返回这个数字. 当是一个表达式时, 则分别递归计算运算符两侧的表达式可能得到的结果并根据运算符对两侧结果进行运算得到当前表达式所有可能得到的运算结果. 感觉和学习编译原理时经典的递归下降解析表达式的值有些相似.
举例来说, 对"2*3-4*5" 这样的式子, 我们只需将其看作不同表达式和运算符的组合, 分别计算这些表达式的值就能得出最终结果, 而计算表达式值的过程都是结构相似的问题, 因此可以不断分解成子问题. 这里就可以分解成2,*, 3-4*5. 即表达式2, 乘号以及后面的表达式. 也可以分解成2*3, -, 4*5....