Basic Calculator
系列在 LeetCode
上有三道:
- LeetCode 224. Basic Calculator 只含加减和括号;
- LeetCode 227. Basic Calculator II 只含加减乘除不含括号;
- LeetCode 772. Basic Calculator III 加减乘除和括号都有。
这类题目重点在于解决运算的优先级问题,需要将数字和运算符按优先级依次处理以得到正确结果。
LeetCode 224
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。
示例 1:
输入:s = “1 + 1”
输出:2
示例 2:
输入:s = “ 2-1 + 2 “
输出:3
示例 3:
输入:s = “(1+(4+5+2)-3)+(6+8)”
输出:23
题解
保存每个数字前的符号并相加。
1 | class Solution { |
LeetCode 227
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。
示例 1:
输入:s = “3+2*2”
输出:7
示例 2:
输入:s = “ 3/2 “
输出:1
示例 3:
输入:s = “ 3+5 / 2 “
输出:5
题解
先遍历计算乘除,再计算加减。
1 | public class Solution { |
LeetCode 772
实现一个基本的计算器来计算简单的表达式字符串。
表达式字符串只包含非负整数,算符 +、-、*、/ ,左括号 ( 和右括号 ) 。整数除法需要 向下截断 。
你可以假定给定的表达式总是有效的。所有的中间结果的范围为 [-231, 231 - 1] 。
示例 1:
输入:s = “1 + 1”
输出:2
示例 2:
输入:s = “6 - 4 / 2”
输出:4
示例 3:
输入:s = “2 * ( 5 + 5 * 2 ) / 3 + ( 6 / 2 + 8 )”
输出:21
示例 4:
输入:s = “( 2 + 6 * 3 + 5 - 3 * 14 / 7 + 2 ) * 5 ) + 3”
输出:-12
示例 5:
输入:s = “0”
输出:0
题解
去除括号带来的影响,相比于 227,差别仅在于将括号内的字符串递归地计算作为整体进行处理。
1 | public class Solution { |