第三题 Java 版
给定字符串, 计算其中的结果,就是那种表达式计算的题
一般思路: 创建两个栈, 一个存储操作数, 一个存储操作符,每次遇到操作符, 取出两个数进行计算。然后存回操作数栈中。
这题使用一个栈就行了, 因为这个不用考虑运算符优先级, 先在前面的运算符优先运算。
模拟。
AC Code
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
public long solve (String str) {
// write code here
Stack<Long> s = new Stack<>();
Stack<String> op = new Stack<>();
char[] cs = str.toCharArray();
long temp = 0;
for(int i = 0; i < cs.length; i++){
if(cs[i] == '#'){
s.add(temp);
temp = 0;
continue ;
}
if(cs[i] >= '0' && cs[i] <= '9'){
temp = temp * 10 + (cs[i] - '0');
} else {
// 操作符
// 取出两个数
long a = s.pop();
long b = s.pop();
long res = 0;
if(cs[i] == '+'){
res = a + b;
}else if(cs[i] == '-'){
res = (b - a);
} else if(cs[i] == '*'){
res = (a * b);
}
// 回栈
s.add(res);
}
}
return s.pop();
}
} 
京公网安备 11010502036488号