题目:
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+
, -
,*
,/
四种运算符和空格
。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2" 输出: 7
示例 2:
输入: " 3/2 " 输出: 1
示例 3:
输入: " 3+5 / 2 " 输出: 5
说明:
- 你可以假设所给定的表达式都是有效的。
- 请不要使用内置的库函数
eval
。
java代码:
class Solution {
public int calculate(String s) {
int res = 0;
int d = 0; //处理连续的两个数字字符是拼成一个数
char sign = '+';
Stack<Integer> nums = new Stack<Integer>();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c >= '0') { //加减乘除和空格的ASCII码都小于'0'
d =d * 10 + s.charAt(i) - '0';
}
if((c < '0' &&c!=' ') || 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 = c;
d = 0;
}
}
for(int t : nums) {
res += t;
}
return res;
}
}