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
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP