【名词解释】
"1#1#+"
2
1#1#+这个后缀表达式表示的式子是1+1,结果为2
"12#3#+15#*"
225
12#3#+15#*这个后缀表达式表示的式子是(12+3)*15,结果为225
"1#1#4#5#-*+1#4#*+"
4
import java.util.*;
public class Solution {
public long legalExp (String str) {
Deque<Long> stack = new ArrayDeque<>();
StringBuilder s = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if ('0'<=str.charAt(i)&&str.charAt(i)<='9') {
s.append(str.charAt(i));
continue;
} else if (str.charAt(i) == '#') {
long n = Long.parseLong(s.toString());
s.delete(0,s.length());
stack.push(n);
} else {
long a = stack.pop(),b = stack.pop();
if (str.charAt(i) == '+') {
stack.push(a+b);
} else if (str.charAt(i) == '-') {
stack.push(b-a);
}else{
stack.push(a*b);
}
}
}
return stack.pop();
}
}
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
public long legalExp (String str) {
Stack<Long> stack = new Stack<>();
StringBuilder numBuilder = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '#') {
// 遇到结束符,将构建的数字入栈
if (numBuilder.length() > 0) {
long num = Long.parseLong(numBuilder.toString());
stack.push(num);
numBuilder.setLength(0); // 重置用于下一个数字
}
} else if (c == '+' || c == '-' || c == '*') {
// 遇到运算符,弹出两个操作数进行计算
long b = stack.pop();
long a = stack.pop();
long result = 0;
switch (c) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
}
stack.push(result);
} else {
// 数字字符,继续构建数字(包括可能的负号)
numBuilder.append(c);
}
}
// 栈顶元素即为最终结果
return stack.pop();
}
}