📜  hackerrank 加减法解决方案 - Javascript (1)

📅  最后修改于: 2023-12-03 15:15:27.861000             🧑  作者: Mango

HackerRank: 加减法解决方案 - JavaScript

题目描述

在本次挑战中,你需要实现一个函数,该函数接收一个包含加法和减法的字符串表达式,例如 "3+2-4",并返回其结果,例如 1。

输入格式:

一个包含加减法的字符串表达式,长度不超过100。

输出格式:

计算结果,为一个整数。

解决方案

这是一个简单的算法问题,我们可以通过遍历输入字符串,解析每个数字和符号,然后计算结果。

我们可以定义变量 sum 来保存累计的结果,并使用 nextOperator 变量来存储下一个操作的操作符。

在遍历字符串时,对于数字字符,我们可以将其转换为整数,并使用 nextOperator 变量来计算当前数字值应该进行的操作(加法或减法),并将其添加到 sum 变量中。

对于操作符字符,则需要更新 nextOperator 变量。

最后,我们在遍历完整个字符串后返回 sum 的值即可。

下面是具体实现:

function evaluateExpression(expression) {
  let sum = 0;
  let nextOperator = '+';

  for (let i = 0; i < expression.length; i++) {
    const char = expression.charAt(i);

    if (/\d/.test(char)) {
      let numStart = i;
      let numEnd = i + 1;

      while (numEnd < expression.length && /\d/.test(expression.charAt(numEnd))) {
        numEnd++;
      }

      const num = parseInt(expression.substring(numStart, numEnd));

      if (nextOperator === '+') {
        sum += num;
      } else {
        sum -= num;
      }

      i = numEnd - 1;
    } else if (char === '+' || char === '-') {
      nextOperator = char;
    }
  }

  return sum;
}
测试示例

我们可以使用下面的测试用例来验证我们的实现是否正确:

const testCases = [
  ['3+2-4', 1],
  ['1+2+3+4+5', 15],
  ['1-2-3-4-5', -13],
  ['1+2-3+4-5', -1],
  ['-1+2+3-4+5', 5],
];

testCases.forEach(([expression, expected]) => {
  const result = evaluateExpression(expression);

  console.log(`Expression: ${expression}`);
  console.log(`Expected: ${expected}`);
  console.log(`Result: ${result}`);
  console.log('-------------------------');
});

这将输出以下结果:

Expression: 3+2-4
Expected: 1
Result: 1
-------------------------
Expression: 1+2+3+4+5
Expected: 15
Result: 15
-------------------------
Expression: 1-2-3-4-5
Expected: -13
Result: -13
-------------------------
Expression: 1+2-3+4-5
Expected: -1
Result: -1
-------------------------
Expression: -1+2+3-4+5
Expected: 5
Result: 5
-------------------------

所有的测试用例都通过了,我们的解决方案完美地解决了这个问题。