【LeetCode】基本计算器 Java 题解
发布于: 2021 年 03 月 10 日
题目
实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。
示例 1:
输入:s = "1 + 1"
输出:2
代码
public class DayCode {
public static void main(String[] args) {
String s = "1+2";
int ans = new DayCode().calculate(s);
System.out.println("ans is " + ans);
}
/**
* https://leetcode-cn.com/problems/basic-calculator/
* 时间复杂度O(n)
* 空间复杂度O(n)
* @param s
* @return
*/
private int idx = 0;
public int calculate(String s) {
Deque<Integer> stack = new ArrayDeque<>();
s = s.trim();
char opt = '+';
int num = 0;
while (idx < s.length()) {
char c = s.charAt(idx);
if (c == '(') {
idx++;
num = calculate(s);
if (idx < s.length()) {
c = s.charAt(idx);
}
}
if (c == ' ') {
idx++;
continue;
}
if (c >= '0' && c <= '9') {
num = num * 10 + (c - '0');
}
if (!(c >= '0' && c <= '9') || (idx == s.length() - 1)) {
switch (opt) {
case '+':
stack.push(num);
break;
case '-':
stack.push(-num);
break;
default:
break;
}
num = 0;
opt = c;
}
idx++;
if (c == ')') {
break;
}
}
int ans = 0;
while (!stack.isEmpty()) {
ans += stack.pop();
}
return ans;
}
}
复制代码
总结
这个题目是栈的经典应用,基本计算器只实现了加减法。栈具有先入后出的性质!
坚持每日一题,加油!
划线
评论
复制
发布于: 2021 年 03 月 10 日阅读数: 6
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/9be5040cc4325828d72f1fe20】。文章转载请联系作者。
HQ数字卡
关注
还未添加个人签名 2019.09.29 加入
LeetCode,略懂后端的RD
评论