後置演算(Postfix):Stack



説明する。

function solution(s) {
  let stack = [];
  for (let x of s) {
    if (Number.isInteger(Number(x))) stack.push(x);
    else {
      let b = stack.pop();
      let a = stack.pop();
      let result = eval(a + x + b);
      stack.push(result.toString());
    }
  }
  const answer = Number(stack[0]);
  return answer;
}

let str = '352+*9-';
console.log(solution(str));
evalを使用して文字列で説明してみます

説明する。

function solution(s) {
  let stack = [];
  for (let x of s) {
    if (Number.isInteger(Number(x))) stack.push(Number(x));
    else {
      let b = stack.pop();
      let a = stack.pop();
      let result;
      switch (x) {
        case '+':
          result = a + b;
          break;
        case '-':
          result = a - b;
          break;
        case '*':
          result = a * b;
          break;
        case '/':
          result = a / b;
          break;
      }
    }
  }
  const answer = Number(stack[0]);
  return answer;
}

let str = '352+*9-';
console.log(solution(str));
evalはできるだけWeb上で使用しないようにするため、switch 문として実現される.

に答える

function solution(s) {
  let answer;
  let stack = [];
  for (let x of s) {
    if (!isNaN(x)) stack.push(Number(x));
    else {
      let rt = stack.pop();
      let lt = stack.pop();
      if (x === '+') stack.push(lt + rt);
      else if (x === '-') stack.push(lt - rt);
      else if (x === '*') stack.push(lt * rt);
      else if (x === '/') stack.push(lt / rt);
    }
  }
  answer = stack[0];
  return answer;
}

let str = '352+*9-';
console.log(solution(str));
淡々とif 문で解けたようです.

学識


数字
  • を識別するには、
  • という2つの方法があります.
  • if(Number.isInteger(Number(x))
  • if(!isNaN(x))
  • ->2番はずっと簡単に見えます.