在学习栈的数据结构的时候讲到可以用栈来实现一个计算器的功能,那么这个功能是如何实现的呢?
采用栈+模拟得方式来实现一个计算器
要实现如下的功能:
字符串如何转为整数
2.处理加减法
如何处理加减法呢?
5-12+8 给第一个数字前面放一个+号。
如何处理乘法呢?
乘法的优先级在于和栈顶的数进行结合,而加减法只是将元素放入栈中去。
如何进行括号运算
最后的Java代码:
class Solution {public int calculate(String s){return f(new LinkedList<>(parseStringToList(s)));}private Deque<Character> parseStringToList(String s) {Deque<Character> list = new LinkedList<>();for (char c : s.toCharArray()) {list.add(c);}return list;}private int f(Deque<Character> s ){Deque<Integer> stack=new LinkedList<>();char sign='+';int num=0;while (!s.isEmpty()){char c=s.pollFirst(); //将第一个弹出来if (Character.isDigit(c)){num=10*num+(c-'0');}if (c=='('){num=f(s);}if (!Character.isDigit(c)&&c!=' '||s.isEmpty()){if (sign=='+'){stack.push(num);}else if (sign=='-'){stack.push(-num); //负数添加进去}else if(sign=='*'){stack.push(stack.poll()*num);}else if(sign=='/'){stack.push(stack.poll()/num);}num=0;sign=c;}if (c==')') break;}int sum=0;for(int n:stack){sum+=n;}return sum;}
}