Boolean Evaluation: Given a boolean expression consisting of the symbols 0 (false)
, 1 (true)
, & (AND)
, | (OR)
, and ^ (XOR)
, and a desired boolean result value result
, implement a function to count the number of ways of parenthesizing the expression such that it evaluates to result
.
EXAMPLE
|
|
Hints: #148, #168, #197, #305, #327
解法1
对于第一个例子的两个做法是:
|
|
怎么分析这个问题?
先看两个简单的例子:
|
|
所以,可以发现加括号实际上可以是一个递归的过程,将表达式根据操作符分割成左右两边,对左右两边再做分割。直到表达式里没有操作符为止,即达到Base Condition。
然后再看表达式的左右两边值得是如何的才能得到期望值:
|
|
所以:
|
|
所以代码:
|
|
上面的代码有点长,可以这样计算:
|
|
因此可以简化:
|
|
解法2
考虑这个表达式a|b&a|b
,当分割成(a|b)*(a|b)
时,左边的数量右边的数量是一致的,因此可以缓存起来避免重复计算。
|
|
评论