1.Leetcode 277题 计算器求值
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,,/ 四种运算符和空格 。 整数除法仅保留整数部分。 示例 1: 输入: "3+22"
输出: 7
示例 2: 输入: " 3/2 "
输出: 1
示例 3: 输入: " 3+5 / 2 "
输出: 5
public int calculate1(String s) {
Stack<Integer> stack = new Stack<>();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length;i++){
char lastOps = '+';
if (chars[i] == ' ') continue;
if (Character.isDigit(chars[i])){
int temp = chars[i] - '0';
while (++i < chars.length && Character.isDigit(chars[i])){
temp = temp * 10 + chars[i] - '0';
}
i--;
if (lastOps == '+')
stack.push(temp);
else if (lastOps == '-') stack.push(-temp);
else stack.push(helper(lastOps , stack.pop(),temp));
}else {
lastOps = chars[i];
}
}
int res = 0;
while (!stack.isEmpty()){
res += stack.pop();
}
return res;
}
public int helper(char lastOps , int i , int j){
if (lastOps == '*'){
return i * j;
}else {
return i / j;
}
}
2.leetcode 150题
逆波兰表达式求值
根据 逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
输入: ["2", "1", "+", "3", "*"]
输出: 9
解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
for (String s : tokens){
if (s.equals("+")){
stack.push(stack.pop() + stack.pop());
}else if (s.equals("-")){
stack.push(stack.pop() - stack.pop());
}else if (s.equals("*")){
stack.push(stack.pop() * stack.pop());
}else if (s.equals("/")){
stack.push(stack.pop() / stack.pop());
}else {
stack.push(Integer.parseInt(s));
}
}
return stack.pop();
}