leetcode 刷题记录(高频算法面试题汇总)--基本计算器 II
2019-03-27 17:12
435 查看
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,
+,
-,
*,
/四种运算符和空格
。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2" 输出: 7
示例 2:
输入: " 3/2 " 输出: 1
示例 3:
输入: " 3+5 / 2 " 输出: 5
说明:
- 你可以假设所给定的表达式都是有效的。
- 请不要使用内置的库函数
eval
。
[code]class Solution: def calculate(self, s: str) -> int: stack = [] op = '+' i = 0 while i<len(s): if s[i].isdigit(): num = 0 while i<len(s) and s[i].isdigit(): num = num*10 + ord(s[i]) - ord('0') i += 1 if op == '+': stack.append(num) if op == '-': stack.append(-num) if op == '*': stack.append(num*stack.pop()) if op == '/': tmp = stack.pop() if tmp < 0: stack.append(-(-tmp//num)) else: stack.append(tmp//num) continue elif s[i] != ' ': op = s[i] i += 1 return sum(stack)
问题&思路:
- 维护一个栈放数字,第一个运算符是+,在将每个数字入栈前,如果前面是+,则直接入栈,如果是-,则将该数字的相反数入栈。如果是*或/,则将栈顶数字和当前数字运算结果入栈。注意除法中要先处理负号的问题,还有要用//整除。
相关文章推荐
- leetcode 刷题记录(高频算法面试题汇总)--逆波兰表达式求值
- leetcode 刷题记录(高频算法面试题汇总)--打乱数组
- leetcode 刷题记录(高频算法面试题汇总)--递增的三元子序列
- 记录C程序员面试题、算法、算法导论、Linux、Qt、NS2、Embedded等相关的的博客汇总
- LeetCode 227. Basic Calculator II(基本计算器II)
- [LeetCode] 227. Basic Calculator II 基本计算器 II
- [LeetCode] Basic Calculator II 基本计算器之二
- leetcode:Path Sum II (路径之和,记录结果路径)【面试算法题】
- 【LeetCode-面试算法经典-Java实现】【154-Find Minimum in Rotated Sorted Array II(找旋转数组中的最小数字II)】
- leetcode编程记录18 #59 Spiral Matrix II
- Leetcode算法学习日志-137 Single Number II
- 个人记录-LeetCode 95. Unique Binary Search Trees II
- [算法][LeetCode]Linked List Cycle & Linked List Cycle II——单链表中的环
- Leetcode Best Time to Buy and Sell Stock II OJ 刷题 算法
- 经典算法面试题 | 最少操作数使数组元素相等 I & II 大合集
- 【LeetCode-面试算法经典-Java实现】【081-Search in Rotated Sorted Array II(搜索旋转的排序数组)】
- 每天一道算法题(七)Leetcode – Word BreakII (Java)
- 机器学习/数据挖掘/算法岗位面试题汇总
- leetcode 240 Search a 2D Matrix II java 算法
- LeetCode Linked List Cycle II(Floyd 判圈算法)