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转换为对应的数字,如何压入栈中,如果既不是数字也不是'#',那么就是加减乘了,根据对应的逻辑,完善代码,这里有一点需要注意的是,每一次从栈顶获取元素,先获得的肯定是栈顶元素,也就是后面输入进去的,所以当处理减法时。我们应该让后出栈的减先出栈的,这样才符合题意