LeetCode 227. 【Java】227. Basic Calculator II
原题链接
中等
作者:
tt2767
,
2020-04-02 22:18:46
,
所有人可见
,
阅读 513
/**
1. 优先级 乘除 > 加减 , 关键是怎么把 加减的计算放到乘除后面
2. 空格什么用都没有, 还得多加判断, 可以在之前全删掉
3. 可以用一个栈来保存:
3.1 遍历到 + , - , 0~9 这些都入栈
3.2 遍历到 乘除时 计算 栈顶与下一个值的结果压入栈中
3.3 遍历结束后 栈中只有 + , - , 0~9 直接计算即可
*/
class Solution {
public int calculate(String s) {
Stack<String> stack = new Stack<>();
s = s.replace(" ", "");
char[] str = s.toCharArray();
int n = str.length;
for (int i = 0 ; i < n ; i++){
if (str[i] == '+' || str[i] == '-'){
stack.push(String.valueOf(str[i]));
} else if (str[i] == '*' || str[i] == '/'){
int x = Integer.parseInt(stack.pop());
char sign = str[i];
int y = 0;
for (int j = i + 1; j < n && '0' <= str[j] && str[j] <= '9';i = j++) y = y * 10 + str[j] - '0';
stack.push(String.valueOf(sign == '*' ? x * y : x / y));
} else if ('0' <= str[i] && str[i] <= '9'){
int y = 0;
for (int j = i; j < n && '0' <= str[j] && str[j] <= '9';i = j++) num = num * 10 + str[j] - '0';
stack.push(String.valueOf(y));
}
}
int result = 0;
while (stack.size() > 1){
int x = Integer.parseInt(stack.pop());
String sign = stack.pop();
result += sign.equals("+") ? x : 0 - x;
}
return result + Integer.parseInt(stack.pop());
}
}