Python字串S表示式求值程式
假設我們有一個字串s作為S表示式。我們必須對該S表示式進行求值,並將結果作為整數返回。眾所周知,s表示式是一個表示式,它可以是一個數字,也可以是一個用括號括起來的遞迴表示式,例如(+ (- 3 2) (* 3 3)),表示(3 - 2) + (3 * 3) = 10。這裡有效的運算子是+、-、*和/。
因此,如果輸入類似於s = "(- (+ 3 2) 2)",則輸出將為3,因為((3 + 2) - 2) = 3。
為了解決這個問題,我們將遵循以下步驟:
stack := 新建一個棧
移除s的開頭和結尾括號
a := 使用空格分割s,並建立一個分割槽列表
對於a中的每個i,按逆序執行:
如果i的長度> 1,則:
如果i[0]與"-"相同,則:
將i作為整數壓入棧
進行下一次迭代
否則:
將i作為整數壓入棧
如果i是一個數字,則:
將i作為整數壓入棧
否則:
如果棧的大小>= 2,則:
num1 := 從棧中彈出
num2 := 從棧中彈出
如果i與"+"相同,則:
執行num1 + num2並將結果壓入棧
如果i與"-"相同,則:
執行num1 - num2並將結果壓入棧
如果i與"*"相同,則:
執行num1 * num2並將結果壓入棧
否則:
執行num1 / num2並將結果壓入棧
返回棧頂元素,並移除棧頂元素
示例
讓我們來看下面的實現來更好地理解:
class Solution:
def solve(self, s):
stack = list()
s = s.replace("(", "")
s = s.replace(")", "")
a = s.split()
for i in a[::-1]:
if len(i) > 1:
if i[0] == "-":
stack.append(int(i))
continue
else:
stack.append(int(i))
elif i.isdigit():
stack.append(int(i))
else:
if len(stack) >= 2:
num1 = stack.pop()
num2 = stack.pop()
if i == "+":
stack.append(int(num1 + num2))
elif i == "-":
stack.append(int(num1 - num2))
elif i == "*":
stack.append(int(num1 * num2))
else:
stack.append(int(num1 / num2))
return stack.pop()
ob = Solution()
s = "(- (+ 3 2) 2)"
print(ob.solve(s))輸入
s = "(- (+ 3 2) 2)"
輸出
3
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP