Pythonの基本的な電卓II
単純な式の文字列を評価するために、基本的な計算機を実装する必要があるとします。式の文字列は、負でない整数、+、-、*、/などの演算子や空のスペースのみを保持します。整数の除算は商の部分のみを取る必要があります。
したがって、入力が「3 + 2 * 2」の場合、出力は7になります。
これを解決するには、次の手順に従います-
- スタックを定義しますs、i:=0、x:=空の文字列
- s
- の各文字jについて
- jが空白文字でない場合
- jをxに追加
- jが空白文字でない場合
- 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増やします
- 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
-
Pythonのヒストグラムで最大の長方形
ヒストグラムの高さを表す整数配列が1つあるとします。各バーには単位幅があります。次のように最大面積の長方形を見つける必要があります- これを解決するには、次の手順に従います- スタックを作成し、i:=0、ans:=0を設定します <高さのサイズなら スタックの要素が0であるか、スタックの最上位要素の高さが<=height [i]の場合、 iをスタックに挿入し、iを1増やします それ以外の場合- x:=スタックの最上位要素、スタックから削除します。 height:=heights [x] temp:=height *(i * stac
-
Pythonで雨水をトラップする
n個の非負の整数の配列があるとします。これらは、各バーの幅が1である標高マップを表しており、雨が降った後にトラップできる水量を計算する必要があります。したがって、マップは次のようになります- ここでは、6つの青いボックスがあることがわかります。したがって、出力は6になります。 これを解決するには、次の手順に従います- スタックst、water:=0およびi:=0を定義します 私は<身長のサイズ =height [i]の場合、iをスタックにプッシュし、iを1増やします それ以外の場合 x:=スタックトップ要素、スタックからトップを削除 スタックが空で