你确定面试的时候用逆波兰表达式??
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open (
and closing parentheses )
, the plus +
or minus sign -
, non-negative integers and empty spaces .
Example 1:
Input: "1 + 1" Output: 2
Example 2:
Input: " 2-1 + 2 " Output: 3
Example 3:
Input: "(1+(4+5+2)-3)+(6+8)" Output: 23
Note:
- You may assume that the given expression is always valid.
- Do not use the
eval
built-in library function.
import java.util.Stack;
class Solution {
public int calculate(String s) {
char[]cs=s.toCharArray();
Stack<Integer>st=new Stack<Integer>();
int sign = 1, res = 0;
for(int i=0; i<cs.length; i++) {
if(Character.isDigit(cs[i])) {
int sum=cs[i]-'0';
while(i+1<cs.length && Character.isDigit(cs[i+1])) {
sum = sum*10 + cs[i+1]-'0';
i++;
}
res += sum*sign;
} else if(cs[i]=='+') {
sign = 1;
} else if(cs[i]=='-') {
sign = -1;
} else if(cs[i]=='(') {
st.push(res); //把之前的结果先放到stack中去
st.push(sign);
res = 0;
sign = 1;
} else if(cs[i]==')') {
res = st.pop() * res + st.pop();
}
}
return res;
}
}
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +
, -
, *
, /
operators and empty spaces . The integer division should truncate toward zero.
Example 1:
Input: "3+2*2" Output: 7
Example 2:
Input: " 3/2 " Output: 1
Example 3:
Input: " 3+5 / 2 " Output: 5
Note:
- You may assume that the given expression is always valid.
- Do not use the
eval
built-in library function.
class Solution {
public int calculate(String s) {
char[]cs=s.replace(" ", "").toCharArray();
int res=0, preVal=0, curVal=0;
char sign = '+';
for(int i=0; i<cs.length; i++) {
curVal = 0;
while(i<cs.length && Character.isDigit(cs[i])) {
curVal = curVal*10 + cs[i]-'0';
i++;
}
if(sign=='+') {
res += preVal;
preVal = curVal;
} else if(sign=='-') {
res += preVal;
preVal = -curVal;
} else if(sign=='*') {
preVal *= curVal;
} else if(sign=='/') {
preVal /= curVal;
}
if(i!=cs.length) sign = cs[i];
}
return res+preVal;
}
}