Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの基本的な電卓II


単純な式の文字列を評価するために、基本的な計算機を実装する必要があるとします。式の文字列は、負でない整数、+、-、*、/などの演算子や空のスペースのみを保持します。整数の除算は商の部分のみを取る必要があります。

したがって、入力が「3 + 2 * 2」の場合、出力は7になります。

これを解決するには、次の手順に従います-

  • スタックを定義しますs、i:=0、x:=空の文字列
  • s
      の各文字jについて
    • jが空白文字でない場合
      • jをxに追加
  • s:=x、n:=xの長さ
  • while i
  • s [i]が「/」の場合、
    • iを1増やします
    • num:=i番目のインデックスから始まる数値、次にiを数値の最後の文字として更新します
    • スタックトップ要素が0未満の場合は、スタックトップ要素を-(stack top / num)として更新します。それ以外の場合は、スタックトップ要素を(stack top / 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

    1. Pythonのヒストグラムで最大の長方形

      ヒストグラムの高さを表す整数配列が1つあるとします。各バーには単位幅があります。次のように最大面積の長方形を見つける必要があります- これを解決するには、次の手順に従います- スタックを作成し、i:=0、ans:=0を設定します <高さのサイズなら スタックの要素が0であるか、スタックの最上位要素の高さが<=height [i]の場合、 iをスタックに挿入し、iを1増やします それ以外の場合- x:=スタックの最上位要素、スタックから削除します。 height:=heights [x] temp:=height *(i * stac

    2. Pythonで雨水をトラップする

      n個の非負の整数の配列があるとします。これらは、各バーの幅が1である標高マップを表しており、雨が降った後にトラップできる水量を計算する必要があります。したがって、マップは次のようになります- ここでは、6つの青いボックスがあることがわかります。したがって、出力は6になります。 これを解決するには、次の手順に従います- スタックst、water:=0およびi:=0を定義します 私は<身長のサイズ =height [i]の場合、iをスタックにプッシュし、iを1増やします それ以外の場合 x:=スタックトップ要素、スタックからトップを削除 スタックが空で