假设我们必须实现一个基本的计算器来评估一个简单的表达式字符串。表达式字符串将仅包含非负整数,某些运算符如+,-,*,/和空格。整数除法应仅包含商部分。
因此,如果输入类似“ 3 + 2 * 2”,那么输出将为7。
为了解决这个问题,我们将遵循以下步骤-
定义一个堆栈s,i:= 0,x:=一个空字符串
对于s中的每个字符j
将j附加到x
如果j不是空白字符
s:= x,n:= x的长度
当我<n
num:=数字从第i个索引开始,然后将i更新为数字的最后一个字符
将num插入堆栈
使我增加1
使我增加1
num:=数字从第i个索引开始,然后将i更新为数字的最后一个字符
将–num插入堆栈
使我增加1
num:=数字从第i个索引开始,然后将i更新为数字的最后一个字符
堆栈顶部:= num *堆栈顶部
使我增加1
num:=数字从第i个索引开始,然后将i更新为数字的最后一个字符
如果堆栈顶部元素<0,则将堆栈顶部元素更新为-(堆栈顶部/数字),否则将堆栈顶部元素更新为(堆栈顶部/数字)
如果s [i]为'/',则
否则,当s [i] =“ *”时
否则当s [i] ='-'
除此以外
返回堆栈元素的总和
让我们看下面的实现以更好地理解-
class Solution(object): def calculate(self, s): """ :type s: str :rtype: int """ stack = [] i = 0 x="" for j in s: if j !=" ": x+=j s = x n = len(s) while i<n: if s[i] == '/': i+=1 num,i = self.make_num(s,i) if stack[-1]<0: stack[-1] = -1*(abs(stack[-1])/num) else: stack[-1] = stack[-1]/num elif s[i] == '*': i+=1 num,i = self.make_num(s,i) stack[-1] = stack[-1]*num elif s[i] == '-': i+=1 num,i = self.make_num(s,i) stack.append(-num) elif s[i] =='+': i+=1 num,i = self.make_num(s,i) stack.append(num) else: num,i = self.make_num(s,i) stack.append(num) i+=1 return sum(stack) def make_num(self,s,i): start = i while i<len(s) and s[i]!= '/' and s[i]!= '*' and s[i]!= '-' and s[i]!='+': i+=1 return int(s[start:i]),i-1
"3+2*2"
输出结果
7