JavaScript - フロントエンドインタビューでのアルゴリズムの質問
给我你的怀抱
给我你的怀抱 2017-05-19 10:27:19
0
11
1508

今日は午後から面接があります。二次面接でアルゴリズムの質問がありました。アルゴリズムについては何もわかりません。誰かに手伝ってください。

今回のテーマは、括弧の加算、減算、乗算、除算を計算する関数を実装することです。入力文字列は (1 2)/4 5 (3 5)*3 に似ています。同様の法的演算を行うことができます。
一般的な考え方について少し説明してもらえますか?インタビュアーはこれはアルゴリズムの質問だと真剣に言いましたが、eval() の実装ではないと思いますよね?

给我你的怀抱
给我你的怀抱

全員に返信(11)
左手右手慢动作

ディスパッチングフィールドアルゴリズムを使用して、中置式を接尾式に変更します(逆ポーランド式)

リーリー
いいねを押す +0
淡淡烟草味

eval はメソッドですが、比較的標準化されていないため、ほとんどの場合は使用しないでください。

この質問に対する正規加算二分木演算の4つの式

いいねを押す +0
仅有的幸福

スタックを使用して式の評価を実装するには、いくつかの方法があります

いいねを押す +0
小葫芦

データ構造に対して逆ポーランド語を使用できます

いいねを押す +0
漂亮男人

最も一般的な方法は、構文分析で式ツリーを構築し、それを解決することです。
自分で作成することも、Antlr と呼ばれる非常に専門的で多用途なライブラリを使用することもできます。
もちろん、面接では文法を分析して自分で文法ツリーを構築するように求められるはずですが、実際にそれを行うとなると、Antlr の方が優れています。

いいねを押す +0
世界只因有你

JavaScriptにおける四則演算の解析アルゴリズムと例、
ぜひご覧ください

JavaScriptにおける四則演算の解析アルゴリズムと例

いいねを押す +0
巴扎黑

eval の放棄されたメソッドの使用はお勧めしません。 1. 正規表現を使用することをお勧めします 2. データ構造でスタックを使用する方法
お勧めの本: JavaScript データ構造とアルゴリズムを学ぶ
最近たまたまスタック、キュー、バイナリツリーを勉強していました

いいねを押す +0
漂亮男人

これは...文字列を入力した場合
eval() を直接使用できます

var a = '(1+2)/4+5+(3+5)*3';
eval(a);

いいねを押す +0
巴扎黑

文字列の四則演算を解析する一般的に使用される方法は、逆ポーランド法です

いいねを押す +0
大家讲道理

それを実装するにはスタックを使用します。2 年前にデータ構造の実験をしていたときに、それをどこに配置するかを探します。私の全体的な印象は、2次元配列を使用して演算子の優先順位を決定し、それを計算するためにスタックを使用するというものです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート