题目描述:
解题思路:
利用栈,记录数字前的符号,遇到+号就将数字压入栈中,-号就将数字的相反数压入栈中,遇到乘除,需要将栈顶数字取出后进行运算再放入栈中,最后将栈里元素相加即可。注意整数的个数不止有一位,所以要先将遍历的字符存起来。
参考代码:
public int calculate(String s) {
char[] c = s.toCharArray();
Stack<Integer> stack = new Stack<>();
//数字前面的符号,用变量保存
char pre = '+';
//要压入栈的数字
int num = 0;
for (int i = 0; i < c.length; i++) {
//数字可能不止有一位,所以num先将连续的数字算出来
if (c[i] < 58 && c[i] >= 48) {
num = num * 10 + c[i] - '0';
}
//当遇到符号的时候,保证不是空格,后面的条件是为了当最后一个字符传入的时候,就需要计算。
if((c[i]<48&&c[i]!=' ')||i==c.length-1){
if (pre == '+') {
stack.push(num);
} else if (pre == '-') {
stack.push(-num);
} else if (pre == '*') {
stack.push(stack.pop() * num);
} else {
stack.push(stack.pop() / num);
}
//更新pre,清空num
pre = c[i];
num=0;
}
}
int res = 0;
while (!stack.isEmpty()) {
res += stack.pop();
}
return res;
}