[アルゴリズム][JS]stack-後置演算
💎 質問する
後置演算式がある場合は、演算結果を出力するプログラムを作成します.
3(5+2)−9を接尾辞演算子として表すと、352+9−となり、結果は12となる.
💎 に答える
const input = '352+*9-';
function solution(input) {
let stack = [];
let result = 0;
const splited = input.split('');
splited.forEach((el) => {
if(el === '+') {
result = parseInt(stack[stack.length - 1]) + parseInt(stack[stack.length - 2]);
stack.pop();
stack.pop();
stack.push(result)
} else if(el === '-') {
result = parseInt(stack[stack.length - 2]) - parseInt(stack[stack.length - 1]);
stack.pop();
stack.pop();
stack.push(result)
} else if(el === '*') {
result = parseInt(stack[stack.length - 1]) * parseInt(stack[stack.length - 2]);
stack.pop();
stack.pop();
stack.push(result)
} else if(el === '/') {
result = parseInt(stack[stack.length - 1]) / parseInt(stack[stack.length - 2]);
stack.pop();
stack.pop();
stack.push(result)
} else {
stack.push(el)
}
})
return stack[0];
}
solution(input);
私は時間制限の問題に集中していますが、残念ながら一度も良いコードが書けませんでした.重複するコードが多すぎて、可読性も悪く、不要な長いコードになりました.
より簡潔でより良い解答を書く方法は何ですか?もう一度考える必要がある.
再オープン
const input = '352+*9-';
function solution(input) {
let stack = [];
let result = 0;
const splited = input.split('');
splited.forEach((el) => {
if(!isNaN(el)) stack.push(Number(el));
else {
let rt = stack.pop();
let lt = stack.pop();
if(el === '+') stack.push(lt + rt);
else if(el === '-') stack.push(lt-rt);
else if(el === '*') stack.push(lt*rt);
else if(el === '/') stack.push(lt/rt);
}
})
return stack[0];
}
solution(input);
💎 Review
1. pop()
pop()メソッドは、配列から最後の要素を削除します.
그 요소를 반환
.△どうもよくわからないので、よく使う方法を改めて整理しなければなりません.
したがって、pop()の場合、スタック[stack.length-1]として指定する必要はありません.
直ちにlt=stackを譲ります.pop();指定すればいいです.
2. isNaN()
split()を使用する場合、すべての要素がstringタイプで配列に含まれます.isnanで数値を区別する方法は?
例を見てみましょう.
isNaN("37"); // 거짓: "37"은 NaN이 아닌 숫자 37로 변환됩니다
isNaN("37.37"); // 거짓: "37.37"은 NaN이 아닌 숫자 37.37로 변환됩니다
stringも数値形式に変換できる場合はisnanではありません.したがってisNaN("3")はfalseで3が数字であることを認識し,isNaN("+")はtrueで数字ではないことを認識する.
気をつけて!
isnan関数が混乱している場合は、ES 15に追加された数字です.覚えておいてください.isnan()に変えるのがもっと適当かもしれません.
Reference
Reference
この問題について([アルゴリズム][JS]stack-後置演算), 我々は、より多くの情報をここで見つけました https://velog.io/@gygy/후위식-연산テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol