Python基礎計算器II


假設我們需要實現一個基礎計算器來計算簡單的表示式字串。表示式字串僅包含非負整數,一些運算子如+,-,*,/和空格。整數除法只取商。

所以如果輸入是“3+2*2”,則輸出為7。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個棧s,i := 0,x := 空字串
  • 對於字串s中的每個字元j
    • 如果j不是空格字元
      • 將j新增到x中
  • 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
  • 返回棧中元素的總和

讓我們看下面的實現以更好地理解:

示例

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

更新於:2020年3月4日

686 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告