在学习栈的数据结构的时候讲到可以用栈来实现一个计算器的功能,那么这个功能是如何实现的呢?
采用栈+模拟得方式来实现一个计算器
要实现如下的功能:
字符串如何转为整数
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;
}
}