import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
public long legalExp (String str) {
// write code here
String string="";
Deque<Long> stackDeque=new ArrayDeque<>();
for (int i = 0; i < str.length(); i++) {
char c=str.charAt(i);
if(c-'0'>=0&&c-'0'<=9) {
string+=c;
}else if(c=='#') {
long a=Long.parseLong(string);
stackDeque.push(a);
string="";
}else {
long a=stackDeque.pop();
long b=stackDeque.pop();
if(c=='+') {
stackDeque.push(a+b);
}else if(c=='-') {
stackDeque.push(b-a);
}else {
stackDeque.push(a*b);
}
}
}
return stackDeque.pop();
}
}
这题卡了我挺久的,首先是如何从字符串获取到数字,我选择根据每一次获取的字符判断,如果是数字,那我就让string接上它,如果是'#'表示输入数字结束了,这个时候我就把string转换为对应的数字,如何压入栈中,如果既不是数字也不是'#',那么就是加减乘了,根据对应的逻辑,完善代码,这里有一点需要注意的是,每一次从栈顶获取元素,先获得的肯定是栈顶元素,也就是后面输入进去的,所以当处理减法时。我们应该让后出栈的减先出栈的,这样才符合题意



京公网安备 11010502036488号