题目:
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+
, -
,*
,/
四种运算符和空格
。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2" 输出: 7
示例 2:
输入: " 3/2 " 输出: 1
示例 3:
输入: " 3+5 / 2 " 输出: 5
解题:
先令sign为‘+’,取新符号前处理上一个符号。 eg. 3 * 5 + 2 即· + 3 * 5 + 2 取到 * 时,处理 + 3,然后令sign = * ;取到 + 时,处理 3 * 5,令sign = +;最后 i == s.length() - 1,处理 15 + 2;
class Solution { public int calculate(String s) { int res = 0, d = 0; char sign = '+'; Stack<Integer> nums = new Stack<Integer>(); for(int i = 0; i < s.length(); i++) { if(s.charAt(i) >= '0') { //加减乘除和空格的ASCII码都小于'0' d =d * 10 + s.charAt(i) - '0'; } if((s.charAt(i) < '0' && s.charAt(i) !=' ') || i == s.length() - 1) { if(sign == '+') { nums.push(d); }else if(sign == '-') { nums.push(-d); }else if(sign == '*' || sign == '/') { int tmp = sign == '*' ? nums.peek() * d : nums.peek() / d; nums.pop(); nums.push(tmp); } sign = s.charAt(i); d = 0; } } for(int t : nums) { res += t; } return res; } }