求一个数学表达式的值

J:\牛网 算法进阶班第4期课程(已完结)\课件 & 代码\新进阶课第3、4节代码\advanced_class_04\Code_07_ExpressionCompute
有些公司面试过程中,如果问到,算法写完以后,测试过程中该怎么测?
本质上,是在罗列边界条件,
哪些极端条件是容易出错的
所以要做到,写代码做题的过程中,把容易注意到的,容易出错的特殊情况记录下来.

回答时,要把对数器的思路说上
01.18.04

在这里插入图片描述
两种情况,如果整个式子没有小括号该怎么算,有小括号了又该怎么算?
没有小括号很简单
在这里插入图片描述
创建一个str类型的栈,

有小括号:
最优解分析:此题的难度在于如何处理表达式中的括号,可以借助一个栈。但如果仅仅靠一个栈,代码量会显得纷多繁杂。如果我们将式中包含左右括号的子表达式的计算单独抽出来作为一个过程(记为 process ),那么该过程可以被复用,如果我们将整个表达式中所有包含左右括号的子表达式当做一个数值,那么原始问题就转化为计算不含括号的表达式了。

以下流程图 条理很清楚了:
在这里插入图片描述
例子:
在这里插入图片描述
其中,要判断:栈顶是不是乘除
如果是,则把栈中,两个东西拿出来,和3算完的结果 扔回去
在这里插入图片描述
在这里插入图片描述
所以,关键是判断 栈顶的符号 是否为乘除,这样可以把乘除都算完,然后栈中就只有加减。

定义一个函数:
在这里插入图片描述
表示从哪一个位置,计算从str的 index位置开始计算公式的。遇到右括号,或者遇到str的结尾,过程结束。
在这里插入图片描述
例子:
在这里插入图片描述
计算:
在这里插入图片描述
即:
在这里插入图片描述
例子:
在这里插入图片描述
先求:
在这里插入图片描述
会遇到左括号。
然后调用
在这里插入图片描述
这个子过程,f(5)返回4位置到14位置的值。

即遇到左括号,调用子过程。不断递归。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值