J:\牛网 算法进阶班第4期课程(已完结)\课件 & 代码\新进阶课第3、4节代码\advanced_class_04\Code_07_ExpressionCompute
有些公司面试过程中,如果问到,算法写完以后,测试过程中该怎么测?
本质上,是在罗列边界条件,
哪些极端条件是容易出错的
所以要做到,写代码做题的过程中,把容易注意到的,容易出错的特殊情况记录下来.
回答时,要把对数器的思路说上
01.18.04
两种情况,如果整个式子没有小括号该怎么算,有小括号了又该怎么算?
没有小括号很简单
创建一个str类型的栈,
有小括号:
最优解分析:此题的难度在于如何处理表达式中的括号,可以借助一个栈。但如果仅仅靠一个栈,代码量会显得纷多繁杂。如果我们将式中包含左右括号的子表达式的计算单独抽出来作为一个过程(记为 process ),那么该过程可以被复用,如果我们将整个表达式中所有包含左右括号的子表达式当做一个数值,那么原始问题就转化为计算不含括号的表达式了。
以下流程图 条理很清楚了:
例子:
其中,要判断:栈顶是不是乘除
如果是,则把栈中,两个东西拿出来,和3算完的结果 扔回去
所以,关键是判断 栈顶的符号 是否为乘除,这样可以把乘除都算完,然后栈中就只有加减。
定义一个函数:
表示从哪一个位置,计算从str的 index位置开始计算公式的。遇到右括号,或者遇到str的结尾,过程结束。
例子:
计算:
即:
例子:
先求:
会遇到左括号。
然后调用
这个子过程,f(5)返回4位置到14位置的值。
即遇到左括号,调用子过程。不断递归。