算法表达式
中缀表达式(A+(B-C/D)E)对应的前缀表达式是(+A-B/CDE)对应的后缀表达式为(ABCD/-E*+)
- 中缀式
正常的数学表达式
- 前缀式 (波兰式)
操作符在数字前面
- 后缀式 (逆波兰式)
操作符在数字后面
中缀表达式->后缀表达式【括号去掉了】【符号栈:改变符号位置】
后缀表达式:List<String>,不能用sb,因为可能为42,不是单数
0) 如果遇到’ ',continue
1)如果遇到数字,我们就直接将其加入到后缀表达式。
2)如果遇到左括号,则我们将其放入到栈中。
3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符加入到后缀表达式直到遇到左括号为止,接着将左括号弹出,但不加入到结果中。
4)如果遇到其他的操作符,如果栈为空,把符号入栈,否则弹出优先级>=它的符号,直到遇到左括号或者栈为空。弹出完这些元素后,最后将当前遇到的操作符压入到栈中。
遇到*/,把符号栈中的*和/弹出到后缀表达式,直到遇到左括号或者栈为空或者遇到±,然后把该符号压栈
遇到±,要把符号栈中所有的操作符弹出到后缀表达式,知道遇到左括号,或者栈为空,然后把该符号压栈
5)如果读到了中缀表达式的末尾,则将栈中所有元素依次弹出。
class Solution {
public int calculate(String s) {
//获取后缀表达式(没有括号了)
List<String> list = new ArrayList<>();
Stack<Character> st_sign = new Stack<>();
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if(c==' ') continue;
else if(Character.isDigit(c