1. 题目

给定一个包含 正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

示例 1:
输入: "3+2*2"
输出: 7示例 2:
输入: " 3/2 "
输出: 1示例 3:
输入: " 3+5 / 2 "
输出: 5说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/calculator-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

几个易错例子
"2147483647"
" 3+5 / 2 "
"+3+2*2"
"-3+2*2"
class Solution {public:int calculate(string s) {long a, sum, i = 0;char op = '+';while(i < s.size() && s[i]==' ')i++;//处理空格stack<int> stk;if(i < s.size() && s[i] == '+')i++;else if(i < s.size() && s[i] == '-'){op = '-';i++;}for( ; i < s.size(); ++i){a = 0;while(i < s.size() && s[i]==' ')i++;//处理空格while(i < s.size() && isdigit(s[i]))a = a*10+s[i++]-'0';if(op == '*'){  a = stk.top() * a;stk.pop();sum = 0;while(!stk.empty()){sum += stk.top();stk.pop();}stk.push(sum);stk.push(a);}else if(op == '/'){  a = stk.top() / a;stk.pop();sum = 0;while(!stk.empty()){sum += stk.top();stk.pop();}stk.push(sum);stk.push(a);}else if(op == '-')stk.push(-a);elsestk.push(a);while(i < s.size() && s[i]==' ')i++;//处理空格if(i < s.size())op = s[i];}sum = 0;while(!stk.empty()){sum += stk.top();stk.pop();}return sum;}
};

20 ms 8.8 MB

程序员面试金典 - 面试题 16.26. 计算器(栈)相关推荐

  1. [Leetcode][程序员面试金典][面试题16.11][JAVA][跳水板][数学][动态规划]

    [问题描述][简单] [解答思路] 边界问题 k=0 ,不能产生跳水板,返回空数组 shorter 等于longer,只有一种跳水板,返回longerk 思路 一般情况,k块木板,k种可能 跳水板的长 ...

  2. java兰顿蚂蚁解题思路_程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)

    1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...

  3. 程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)

    1. 题目 两个(具有不同单词的)文档的交集(intersection)中元素的个数除以并集(union)中元素的个数,就是这两个文档的相似度. 例如,{1, 5, 3} 和 {1, 7, 2, 3} ...

  4. 程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)

    1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...

  5. 程序员面试金典 - 面试题 16.09. 运算(只用+法做乘除)

    1. 题目 请实现整数数字的乘法.减法和除法运算,运算结果均为整数数字, 程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算. 你的实现应该支持如下操作: Operati ...

  6. 程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)

    文章目录 1. 题目 2. 解题 2.1 排序 2.2 不排序 1. 题目 给定一个整数数组,编写一个函数,找出索引 m 和 n ,只要将索引区间 [m,n] 的元素排好序,整个数组就是有序的. 注意 ...

  7. 程序员面试金典 - 面试题 16.20. T9键盘(数组)

    1. 题目 在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表. 每个数字映射到0至4个字母.给定一个数字序列,实现一个算法来返回匹配单词的列表. 你会得到一张含有有效单词的列表 ...

  8. 程序员面试金典 - 面试题 16.18. 模式匹配(逻辑题)

    1. 题目 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式. 例如,字符串"ca ...

  9. 程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)

    1. 题目 给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]. 请找出一条直线,其通过的点的数目最多. 设穿过最多点的直线所穿过的全部点编号 ...

最新文章

  1. win7台式电脑怎么连wifi_win7系统怎么设置WiFi共享
  2. 散列算法 SHA-1,SHA-2和SHA-256之间的区别
  3. python中str是什么函数_Python str()函数
  4. MFC/VC++中怎样设置位图按钮并且位图不会覆盖文字——–位图按钮
  5. 《Dotnet9》系列-开源C# Winform控件库1《HZHControls》强力推荐
  6. android代码画出波浪球,Android绘制波浪曲线,效果很赞的。
  7. pandas series取值_【小学生级】pandas入门到精通备查表——AI未来系列3
  8. A - 顺序表应用1:多余元素删除之移位算法
  9. 用互联网模式打造智慧城市的“城市云”
  10. iOS开发Cocoapods执行命令pod setup,执行失败解决RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
  11. 计算机中submit commit区别
  12. 带头节点的链式存储栈基本操作(进栈、出栈、获取栈顶元素)
  13. Sublime Text 3使用SublimeLinter配置JS,CSS,HTML语法检查(实用)
  14. wps怎么把两张图片组合_wps如何把图片和图形进行组合?图片和图形进行组合的方法...
  15. 基于Electron的桌面端应用开发和实践
  16. 利用稀疏格式矩阵求解方程组以及机器学习训练速度对比
  17. 《量化交易:如何建立自己的算法交易》简介及PDF电子书下载
  18. Linux学习从入门到精通推荐书籍
  19. cesium加载geoJson格式的图斑方法
  20. Python将两个列表合并为一个字典

热门文章

  1. 机器学习之必知开源数据集
  2. 高光谱图像pca降维_高光谱图像的数据特性之探讨
  3. 数据链路层:ARP协议详解(绝对经典)
  4. oracle的等保,3.Oracle 检查(部分)
  5. 第六章实验报告(函数和宏定义实验)
  6. PHP页面显示中文字符出现乱码
  7. asp.net 的页面几种传值方式
  8. 移动端中如何检测设备方向的变化?
  9. OpenGL于MFC使用汇总(三)——离屏渲染
  10. Swift学习笔记 闭包表达式