2023-07-19:布尔表达式 是计算结果不是 true 就是 false 的表达式
有效的表达式需遵循以下约定:
't',运算结果为 true
'f',运算结果为 false
'!(subExpr)',运算过程为对内部表达式 subExpr 进行 逻辑非(NOT)运算
'&(subExpr1, subExpr2, ..., subExprn)'
运算过程为对 2 个或以上内部表达式
subExpr1, subExpr2, ..., subExprn 进行 逻辑与(AND)运算
'|(subExpr1, subExpr2, ..., subExprn)'
运算过程为对 2 个或以上内部表达式
subExpr1, subExpr2, ..., subExprn 进行 逻辑或(OR)运算
给你一个以字符串形式表述的 布尔表达式 expression,返回该式的运算结果。
题目测试用例所给出的表达式均为有效的布尔表达式,遵循上述约定。
输入:expression = "&(|(f))"。
输出:false。
答案2023-07-19:
大体过程如下:
1.主函数中定义了一个布尔表达式为"&(|(f))",该表达式需要计算结果。
2.调用函数,并将布尔表达式作为参数传递给它。
3.函数中定义了一个内部递归函数,接收两个参数:表达式字符串和当前字符索引。
4.函数中首先获取当前索引处的字符,判断其类型。
5.如果为't',返回结果为true,索引保持不变。
6.如果为'f',返回结果为false,索引保持不变。
7.如果为其他字符,进行进一步判断。
8.如果为'!',则递归调用函数,并将索引加1作为参数,获取递归调用的结果,对该结果执行逻辑非运算,返回结果为,索引更新为。
9.如果为'&'或'|',则设置布尔变量为相应的值(true或false),并在循环中处理多个子表达式。
10.在循环中,当当前字符不是')'时,执行以下操作:
11.循环结束后,返回结果为,其中为布尔表达式的计算结果,为当前索引。
12.返回到函数,获取函数的结果,返回作为布尔表达式的最终计算结果。
13.输出最终结果。根据给定的表达式"&(|(f))",计算结果为false,打印结果false。
时间复杂度:假设表达式字符串的长度为n,递归过程涉及到遍历字符串中的每个字符,因此时间复杂度为O(n)。
空间复杂度:递归调用过程中会使用额外的栈空间来保存递归的状态,最坏情况下递归的深度可以达到n,因此空间复杂度为O(n)。
go完整代码如下:
在这里插入图片描述rust代码如下:
在这里插入图片描述c++完整代码如下:
在这里插入图片描述c完整代码如下:
在这里插入图片描述
领取专属 10元无门槛券
私享最新 技术干货