几乎同样的代码,注意数据类型

来源:7-2 棒球比赛-代码实操

_玲

2019-03-08

/**
*  思路:将有含义的符号转换为数字;
* 1. 遍历数组arr;
* 2. 初始化result = [];
* 3. 非C、非D、非+,推到result中;
* 4. 遇C,删掉result最后一位;
* 5. 遇D,将result最后一位 * 2,推入result中;(如果第一位出现D呢?---人为忽略)
* 6. 遇+,将result后两位只和,推入result中;(如果第二位出现+呢?---人为忽略)
* 7. 将result作和;
*/
export default (arr) => {
  // 用数组来实现堆栈结构,pop,push
  let result = []
  // 对数组进行遍历,遍历的目的是处理得分
  arr.forEach(item => {
    switch (item) {
      case 'C':
        result.pop()
        break
      case 'D':
      //克隆数组;
        result.push([...result].pop() * 2)
        break
      case '+':
      //克隆数组;
        // const clone = [].concat(result)
        const clone = JSON.parse(JSON.stringify(result))
        result.push(clone.pop() + clone.pop())
        break
      default:
        result.push(+item)
    }
  })
  return result.reduce((total, num) => { return total + num })
}

注意: 有没有发现,最终的result数组元素不再是字符串,而是 数字类型,老师也有偷偷地转换呢。

写回答

2回答

用代码虚构一个你

2020-03-30

兄弟这个整复杂了,其实只需要对放入result的第一个数设为数字类型就行了,老师用的*1,用parseInt方法也可以

0
0

快乐动起来呀

2019-03-10

嗯呢,+的运算符特性,不转换就是字符串了

0
0

JavaScript版 数据结构与算法

填补前端同学的算法短板,掌握面试中最常见的算法与数据结构

2467 学习 · 395 问题

查看课程