Leetcode 227. 基本计算器 II
题目描述
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2"
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
思路
思路1:栈
使用一个栈存储数字,然后使用一个符号记录延后记录运算符,初始为+,最后出栈相加即可得到最后的结果
代码
代码1
class Solution {
public int calculate(String s) {
if (s == null || s.length() == 0){
return 0;
}
int result = 0;
int tempNum = 0;
char tempOp = '+';
int getNum = 0;
Stack stack = new Stack<>();
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if (ch >= '0' && ch <= '9'){
tempNum = tempNum * 10 + ch - '0';
}
if ((ch != ' ' && (ch < '0' || ch > '9')) || i == s.length() - 1){
switch(tempOp){
case '+':
stack.push(tempNum);
break;
case '-':
stack.push(-tempNum);
break;
case '*':
getNum = stack.peek() * tempNum;
stack.pop();
stack.push(getNum);
break;
case '/':
getNum = stack.peek() / tempNum;
stack.pop();
stack.push(getNum);
break;
}
tempNum = 0;
tempOp = ch;
}
}
while(!stack.isEmpty()){
result += stack.pop();
}
return result;
}
}
复杂度分析
时间复杂度
$O(n)$
空间复杂度
$O(n)$