https://leetcode.com/problems/basic-calculator/submissions/
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。
示例 1:
输入: "1 + 1"
输出: 2
示例 2:
输入: " 2-1 + 2 "
输出: 3
示例 3:
输入: "(1+(4+5+2)-3)+(6+8)"
输出: 23
stack里面只存两个值,遇见左括号之前的result和操作数sign(+ -)。
剩下的数值运算是走一步算一步。
class Solution {
public int calculate(String s) {
if(s==null||s.length()==0)
return 0;
int result=0,sign=1;
Stack<Integer> stack=new Stack();
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(Character.isDigit(c)){
int num=c-'0';
while((i+1)<s.length()&&Character.isDigit(s.charAt(i+1))){
num=num*10+s.charAt(i+1)-'0';
i++;
}
result+=sign*num;
}else if(c=='+')
sign=1;
else if(c=='-')
sign=-1;
else if(c=='('){
stack.push(result);
stack.push(sign);
result=0;
sign=1;
}else if(c==')'){
result=result*stack.pop()+stack.pop();
}
}
return result;
}
}