给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: “3+2*2”
输出: 7
代码
class Solution {
public int calculate(String s) {
int i=0,n=s.length();
LinkedList<Character> stack=new LinkedList<>();//符号栈
LinkedList<Integer> stack1=new LinkedList<>();//数值栈
while (i<n)
{
if(s.charAt(i)==' '){//跳过空格
i++;
continue;
}
if(Character.isDigit(s.charAt(i)))//提取数值进栈
{
int num=0;
while (i<n&&Character.isDigit(s.charAt(i)))
{
num=num*10+s.charAt(i)-'0';
i++;
}
stack1.addLast(num);
}
else{
char ch=s.charAt(i);
if(ch=='+'||ch=='-')//加减号入栈
{
stack.add(ch);
i++;
}
else {//乘除号计算结果后入栈
i++;
int num2=0;
while (s.charAt(i)==' ') i++;
while (i<n&&Character.isDigit(s.charAt(i)))
{
num2=num2*10+s.charAt(i)-'0';
i++;
}
if(ch=='*')
stack1.add(num2*stack1.removeLast());
else
stack1.add(stack1.removeLast()/num2);
}
}
}
while (!stack.isEmpty()){//计算剩下的+-运算
int a=stack1.removeFirst();int b=stack1.removeFirst();
if(stack.removeFirst()=='+') {
stack1.addFirst(a+b);
}else stack1.addFirst(a-b);
}
return stack1.getFirst();
}
}