191 - 227 基本计算器2
题目
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2" 输出: 7
示例 2:
输入: " 3/2 " 输出: 1
示例 3:
输入: " 3+5 / 2 " 输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
解答
1是困难,比2需要多判断一下括号的优先级
总感觉这两道题的标号反了。。
只能想到,split字符串,然后取不同的字符串,转换成数字。再相加
https://leetcode.com/problems/basic-calculator-ii/discuss/63076/Python-short-solution-with-stack.
class Solution:
def calculate(self, s: str) -> int:
num, stack, sign = 0, [], "+"
for i in range(len(s)):
if s[i].isdigit():
num = num*10 + int(s[i])
if s[i] in "+-*/" or i == len(s)-1:
if sign == "+":
stack.append(num)
elif sign == "-":
stack.append(-num)
elif sign == "*":
stack.append(stack.pop()*num)
elif sign == "/":
stack.append(int(stack.pop()/num))
sign, num = s[i], 0
return sum(stack)
Runtime: 92 ms, faster than 69.86% of Python3 online submissions for Basic Calculator II.
Memory Usage: 14.3 MB, less than 88.89% of Python3 online submissions for Basic Calculator II.
class Solution:
def calculate(self, s: str) -> int:
s += "+0"
stack, num, sign = [], 0, "+"
for i in range(len(s)):
if s[i].isdigit():
num = num*10+int(s[i])
elif not s[i].isspace():
if sign == "+":
stack.append(num)
elif sign == "-":
stack.append(-num)
elif sign == "*":
stack.append(stack.pop()*num)
elif sign == "/":
stack.append(int(stack.pop()/num))
sign, num = s[i], 0
return sum(stack)
Runtime: 72 ms, faster than 92.84% of Python3 online submissions for Basic Calculator II.
Memory Usage: 14.6 MB, less than 88.89% of Python3 online submissions for Basic Calculator II.
split
https://leetcode.com/problems/basic-calculator-ii/discuss/63170/Easy-7-12-lines-Three-solutions
先根据+-拆,然后每个子项根据*/拆
class Solution:
def calculate(self, s: str) -> int:
total = 0
outer = iter(['+']+re.split('([+-])', s))
for addsub in outer:
inner = iter(['*'] + re.split('([*/])', next(outer)))
term = 1
for muldiv in inner:
n = int(next(inner))
term = term*n if muldiv == '*' else term // n
total += term if addsub == '+' else -term
return total
Runtime: 148 ms, faster than 21.57% of Python3 online submissions for Basic Calculator II.
Memory Usage: 17.9 MB, less than 7.41% of Python3 online submissions for Basic Calculator II.
Last updated
Was this helpful?