写点什么

【LeetCode】基本计算器 Java 题解

用户头像
HQ数字卡
关注
发布于: 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
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】基本计算器Java题解