###############問題文###
いくつかの正の整数を含む長さ「N」の配列が与えられます。さらに、「*」と「」の文字のみを含む長さ「N-1」の文字列が与えられます。「*」は乗算演算子、「」は加算演算子です。配列要素に対して算術演算を実行して、最小の正の整数値を取得するように求められます。 ###例### ###入力### リーリー ###出力### リーリー
イラスト
イラスト
この方法ではビット マスキングを使用して問題を解決します。
ここで、「1」が「*」、「0」が「」演算子であると仮定すると、文字列内で指定された算術演算子のすべての順列を取得できます。
ステップ 2
- for ループを使用して、指定された文字列を反復処理します。現在の文字が「*」に等しい場合、「totalMul」変数の値は 1 増加します。ステップ 3
- X が文字列の長さに等しい場合に、for ループを使用して、可能なすべてのビット マスクを取得します。ここで、「len」は配列の長さ、「len - 1」は文字列の長さです。ステップ 4
- 「setBitCount」変数を定義して、現在のマスクに設定されているビット数を保存します。さらに、算術演算の現在の順序を保存するために「順序」リストが定義されます。ステップ 5
- for ループ内で別の for ループを使用して、現在のマスクに設定されているビットの合計数 (「1」) を取得します。 j を左に 1 ビットシフトし、I で & 演算を実行し、j 番目のビットがセットされているかどうかを判断します。ステップ 6
- 現在のビットが設定ビットの場合は、「setBitCount」変数の値を増やし、「*」をシーケンス ベクトルにプッシュします。それ以外の場合は、「」をシーケンス ベクトルにプッシュします。シーケンスベクトル中間。ステップ 7
- setBitCount の値が totalMul の値と等しい場合、現在のマスクを使用して算術演算をスケジュールできることを意味します。そうでない場合は、次の反復に入ります。ステップ 8
- if ステートメントで、「deque」データ構造を使用して配列要素を格納する「currentQueue」を定義します。ステップ 9
- 「順序」リストを調べます。現在の文字が「*」の場合、キュー内の最後の要素をポップし、現在の配列インデックスの要素と乗算します。ステップ 10
- 「orders」リストの現在の文字が「」の場合、現在の配列要素を「currentQueue」にプッシュします。ステップ 11
- while ループを使用して、「currentQueue」からすべての要素をポップし、すべての要素を合計します。ステップ 12
- min() 関数を使用して、「minimum」変数と「sum」変数から最小値を取得します。###例### リーリー ###出力### リーリー
以上が配列要素に「+」および「*」演算を適用することで取得できる最小の数値。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。