字符串加减乘除计算
经典例题,这题的3点说明是降低了一点难度,不然需要考虑有效性和溢出等状况。
tips:在笔试面试时,关注容易出错的地方和边界条件,在刷题的过程中需要将特殊情况进行标记,多积累特殊的情况,面试官询问对于算法如何检查之类的可以先回答对数器,同时需要回答需要关注的特殊情况和边界条件。
【题目】
【思路】
整个式子分为两种情况:
- 没有括号:新建一个栈,将数字和符号都放到栈中,如果顶端的符号是+或者-,则此时可以放入数字,如果顶端字符是或者/,则此时将最后放入的或/和符号下的数字取出,然后与即将放入的字符进行运算,运算结果放入到栈中。
- 存在括号:如果遇见了括号,则从括号的下一个位置开始计算,直到遇到右括号或者到了字符串结尾结束。中间过程不考虑空间复杂度可以考虑当存在左括号的时候允许其新建栈,如果此时没有括号了,则又变成了第一种情况,如果中间还存在括号,则又再次经历第二种情况,最后一定会返回到没有括号的情况。将括号内运算结果同样当做一个小步,此时保存到栈中。
需要的返回值:
3. 停止的位置
4. 停止位置计算的结果是多少。
【代码】
//主函数,主函数最后只关心最后计算的数值,其他不关心
public static int getValue(String str){
return value(str.toCharArray(),0