Python基础计算器II
假设我们需要实现一个基础计算器来计算简单的表达式字符串。表达式字符串仅包含非负整数,一些运算符如+,-,*,/和空格。整数除法只取商。
所以如果输入是“3+2*2”,则输出为7。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个栈s,i := 0,x := 空字符串
- 对于字符串s中的每个字符j
- 如果j不是空格字符
- 将j添加到x中
- 如果j不是空格字符
- s := x,n := x的长度
- 当i < n
- 如果s[i]是‘/’,则
- i增加1
- num := 从第i个索引开始的数字,然后将i更新为数字的最后一个字符
- 如果栈顶元素< 0,则将栈顶元素更新为-(栈顶 / num),否则将栈顶元素更新为(栈顶 / num)
- 否则,当s[i] = “*”
- i增加1
- num := 从第i个索引开始的数字,然后将i更新为数字的最后一个字符
- 栈顶 := num * 栈顶
- 否则,当s[i] = ‘-’
- i增加1
- num := 从第i个索引开始的数字,然后将i更新为数字的最后一个字符
- 将–num插入栈中
- 否则
- num := 从第i个索引开始的数字,然后将i更新为数字的最后一个字符
- 将num插入栈中
- i增加1
- 如果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
广告