224. 基本计算器
题目描述
给你一个字符串表达式 s
,请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()
。
输入输出
1 2 3 4 5 6 7 8
| 输入:s = "1 + 1" 输出:2
输入:s = " 2-1 + 2 " 输出:3
输入:s = "(1+(4+5+2)-3)+(6+8)" 输出:23
|
基本思路
leetcode 224/227 有些类似 逆波兰式解决
java实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| class Solution { public int calculate(String s) { Deque<Integer> op = new LinkedList<Integer>(); op.push(1); int sign = 1;
int res = 0; int n = s.length(); int i = 0; while(i < n){ if(s.charAt(i) == ' '){ i++; } else if(s.charAt(i) == '+'){ sign = op.peek(); i++; } else if(s.charAt(i) == '-'){ sign = -op.peek(); i++; } else if(s.charAt(i) == '('){ op.push(sign); i++; } else if(s.charAt(i) == ')'){ op.pop(); i++; } else{ long num = 0; while(i < n && Character.isDigit(s.charAt(i))){ num = num * 10 + s.charAt(i) - '0'; i++; } res += sign * num; } } return res; } }
|