224. 基本计算器

【双栈】nums用来存数,ops用来存符号。

1.预处理:把所有空格去掉,在前面加个‘0',防止出现 -1 + 2 这种样例。

2.遍历

(1)遇到 '(' 直接压入ops。

(2)遇到数字,通过 t * 10 + c - ‘0’ 直接计算出数值。

(3)遇到 ')' 把前面直到 '(' 的表达式算完,并把 '(' 丢掉。

(4)遇到 '+' 把前面直到  '(' 的表达式算完,'(' 不能丢;或者算到ops为空。

(5)遇到 '-',这种情况比较特殊,需要看一下前面是不是 '(' ,如果是的话往nums里插入一个0,防止这种不讲武德的样例 0 - ( - ( - 3 + 4) - 4)。

class Solution {// 双栈 1:23 2:48public int calculate(String s) {Deque<Integer> nums = new LinkedList();Deque<Character> ops = new LinkedList(); s = s.replace(" ", "");s = "0" + s;int n = s.length(), t = 0;int flag = 0;for (var i = 0; i < n; i++) {char c = s.charAt(i);if (c == ' ') continue;if (c == '(') {ops.push(c);} else if (c == ')') {if (flag != 0) {nums.push(t); t = 0;flag = 0;}while (!ops.isEmpty()) {char top = ops.poll();if (top == '(') break;else if (top == '+') {nums.push(nums.poll() + nums.poll());} else if (top == '-') {int tmp = nums.poll();nums.push(nums.poll() - tmp);}}// System.out.println(nums.peek());} else if (c == '+' || c == '-') {if (s.charAt(i - 1) == '(') {nums.push(0);ops.push('-'); continue;}if (flag != 0) {nums.push(t); t = 0;flag = 0;}while (!ops.isEmpty()) {char top = ops.poll();if (top == '(') {ops.push('('); break;} else if (top == '+') {nums.push(nums.poll() + nums.poll());} else if (top == '-') {int tmp = nums.poll();nums.push(nums.poll() - tmp);}}// System.out.println(nums.peek());ops.push(c);} else {t = t * 10 + c - '0';if (flag == 0) flag = 1;if (i == n - 1) {nums.push(t); t = 0;}}}while (!ops.isEmpty()) {char top = ops.poll();if (top == '+') {nums.push(nums.poll() + nums.poll());} else if (top == '-') {int tmp = nums.poll();if (nums.isEmpty()) {nums.push(-tmp);} else {nums.push(nums.poll() - tmp);}}}return nums.poll();}
}

LeetCode 224. 基本计算器相关推荐

  1. leetcode 224. 基本计算器(栈)

    给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值. 示例 1: 输入:s = "1 + 1" 输出:2 示例 2: 输入:s = " 2-1 + 2 ...

  2. 数据结构与算法 | LeetCode 224. Basic Calculator

    原文链接:https://wangwei.one/posts/alg... 前面,我们学习了 栈的实现及其应用 ,今天我们基于栈,来实现一个简单的计算器功能. 简单计算器实现 Leetcode 224 ...

  3. 【一天一道Leetcode】基本计算器的延伸问题

    本篇推文共计2000个字,阅读时间约3分钟. 01 题目描述 题目描述: 给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值. 整数除法仅保留整数部分. 示例: 输入:s = " ...

  4. leetcode 224. Basic Calculator | 224. 基本计算器(中缀表达式求值)

    题目 https://leetcode.com/problems/basic-calculator/ 题解 中缀表达式求值,之前学数据结构的笔记: class Solution {public int ...

  5. 【LeetCode - 224】基本计算器(栈)

    实现一个基本的计算器来计算一个简单的字符串表达式 s 的值. 题目链接:https://leetcode-cn.com/problems/basic-calculator/ 示例 1: 输入:s = ...

  6. leetcode 227. 基本计算器 II(栈)

    给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值. 整数除法仅保留整数部分. 示例 1: 输入:s = "3+2*2" 输出:7 解题思路 利用两个栈,一个记录 ...

  7. 力扣—— 224. 基本计算器(困难)

    目录 题目描述 题目分析 c++代码 题目描述 给你一个字符串表达式s,请你实现一个基本的计算器来返回它的值.注意不允许使用任何将字符串作为数学表达式计算的内置函数,比如:eval(). 示例一: 输 ...

  8. leetcode 手写计算器 方法总结

    1.leetcode 227 Basic calculator 我目前见过的最好的解法 Implement a basic calculator to evaluate a simple expres ...

  9. 224. 基本计算器

    实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格  . 示例 1: 输入: "1 + 1" ...

最新文章

  1. JDBC学习DayTwo
  2. 语义分割--Dilated Residual Networks 之转载
  3. Android 下载文件并显示进度条
  4. 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | 文件头 Header 分析 | 标签 Tag 分析 | 视频标签 Tag 数据分析 )
  5. 使用WatchService监控文件变化
  6. 林昊获中国计算机学会杰出工程师奖,阿里中间件再获高度肯定,“三位一体”推动技术普惠
  7. 涨跌因子计算器下载哪里下载_小白计算器软件下载-小白计算器app下载 v1.0 安卓版...
  8. java launcher 下载_Java Launcher下载并安装
  9. 密码学专题 鉴别协议|实际应用的混合协议
  10. ARMA模型的性质之ARMA模型
  11. github语音识别对对_语音识别尝试方向
  12. 企业要做好安全遵从的五个实用技巧
  13. java底层app_Java底层类和源码分析系列-ArrayBlockingQueue底层架构和源码分析
  14. linux忘记root密码及时间设定
  15. 李开复谈软件外包及软件安全(一)
  16. 廖雪峰python教程答案-廖雪峰老师Python3教程练习整理
  17. 用matlab来计算函数,Matlab函数求导教程
  18. 知识点二十五:启发式搜索算法——A*算法
  19. Android应用开发详解
  20. python调用百度云文字识别

热门文章

  1. 微信小程序心形点赞效果
  2. 个人简历需要写什么内容?简历模板的基本内容有哪些
  3. C语言中实现四舍五入
  4. 金万维备无忧专为工业领域数据安全备份
  5. jeee的基础知识(转载)
  6. Multipath以及device mapper
  7. 对于2019年的一点展望和建议
  8. 抓住423大促的尾巴!华章重磅黑皮书压轴登场!
  9. 威尔克姆 E2.0T系统驱动装不了
  10. LiveVISGAT1400视图库服务-支持海康大华华为宇视天地伟业等设备视图库接入使用说明