我正在开发Cracking The Coding Interview中的以下算法:
给定一个包含符号{true,false,和的符号的布尔表达式 或者,xor},计算括号表达式的方法的数量 它评估为真。
作者详细介绍了在每个运算符char上放置括号的递归解决方案。因此,例如,如果表达式是1 ^ 0 ^ 0 | 1,那么放置在char = 1将是(1)^(0 ^ 0 | 1)。
她为每个运算符char i执行此操作,从1到n,其中两个表达式从0到i,i + 1到n,然后在每个子字符串上调用递归函数。
这是我不明白的地方。例如,1 ^(0 ^ 0)| 1此表达式被排除在此过程之外。这是为什么?这也不重要吗?
答案 0 :(得分:0)
1 ^ (0 ^ 0) | 1
与(1 ^ (0 ^ 0)) | (1)
相同。
由于您提到了递归插入的parantheses,因此没有遗漏任何内容:
1 ^ 0 ^ 0 | 1 | +--(1) ^ (0 ^ 0 | 1) | +--(1) ^ ((0 ^ 0) | 1) | +--(1) ^ (0 ^ (0 | 1)) | +--(1 ^ 0) ^ (0 | 1) | +--(1 ^ 0 ^ 0) | (1) +--((1 ^ 0) ^ 0) | (1) +--(1 ^ (0 ^ 0)) | (1) ← here it is