You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求实现getLastNumbers函数:提取数组最后一个运算符后的数字序列

实现getLastNumbers函数:提取最后一个运算符后的数字组

首先明确需求:

实现一个名为getLastNumbers的函数,该函数遍历数组,返回最后一个运算符(+、-、*、/)之后的最后一组数字(将数字拼接为整数)。

现有代码的问题

你的思路方向没问题,但在定位最后一个运算符时存在逻辑漏洞:

  • 使用arr.indexOf(arr[i])会返回第一个匹配运算符的索引,而非当前遍历到的运算符位置——如果数组中有多个相同运算符,这会直接导致你拿到错误的索引值。
  • 整个找最后运算符的流程过于繁琐,不需要先统计运算符数量再循环计数,反向遍历找第一个运算符的方式会更高效简洁。

优化后的实现代码

这里给出更可靠且简洁的实现:

function getLastNumbers(arr) {
  // 用集合存储运算符,方便快速判断
  const operators = new Set(['+', '-', '*', '/']);
  let lastOpIndex = -1;

  // 从数组末尾往前遍历,找到第一个运算符就停止
  for (let i = arr.length - 1; i >= 0; i--) {
    if (operators.has(arr[i])) {
      lastOpIndex = i;
      break;
    }
  }

  // 处理数组中没有运算符的特殊情况
  if (lastOpIndex === -1) {
    return parseInt(arr.join(''));
  }

  // 提取运算符后的所有数字,拼接成整数返回
  const numberStr = arr.slice(lastOpIndex + 1).join('');
  return parseInt(numberStr);
}

思路解释

  1. 运算符集合:用Set存储运算符,判断元素是否为运算符的操作更高效,代码也更简洁。
  2. 反向遍历定位运算符:从数组末尾开始往前找,找到第一个运算符就记录位置并跳出循环,这是最直接高效的方式,实际遍历次数通常远小于数组长度。
  3. 无运算符场景处理:如果数组里没有运算符,直接把所有数字拼接成整数返回。
  4. 数字拼接:用slice提取运算符之后的所有元素,直接join('')拼接成字符串,再转为整数。

测试示例验证

用你给出的示例测试,结果均符合预期:

  • 输入[1, 1, 1, 1, 1, 1, "+", 2, 2, 2, 2, 2, 2, "*", 3, 3, 3, 3, 3, "-", 6, 6, 6, 6] → 返回6666
  • 输入[1, 1, 1, 1, "+", 6, 6, 6, 6, 6, 6, "*", 9, 9, 9, 9, 9, "-", 6, 6, 6, 6, "+", 3, 3, 3] → 返回333
  • 输入[7, "*", 7, "-", 6, "+", 3, "+", 6, "+", 3, 3, 3, 3, 3, "+", 6, "-", 5, 5, 5, 5, 5, 5, "*", 9, 9] → 返回99
  • 输入[5, "*", 5] → 返回5
  • 你提供的测试用例[1, "+", 3, 3, 3, 3, 3, "+", 6, "+", 9, "*", 6, 6, 6, 3, 6, 6, 6, "-", 5, "*", 9, 9, 9, 9, 9, 9, 9, '/', 6, 8, 9, 9, '*', 8, 8, 8, 7] → 返回8887

内容的提问来源于stack exchange,提问作者NewTech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:52:24