#2665:计数器II
#javascript #算法 #leetcode

30 Days挑战赛上的第3号是#2665,计数器II。这项挑战主要是最后一天的附加组件,因此请务必在#2620上查看my post以获取概念详细信息。

过程

给出的说明非常简单。

写一个函数createCounter。它应该接受初始整数init。它应该返回具有三个函数的对象。

这三个功能是:

increment()将当前值增加1,然后返回。
decrement()将当前值降低1,然后返回。
reset()将当前值设置为init,然后将其返回。

还包括一些直接测试。

const counter = createCounter(5)
counter.increment(); // 6
counter.reset(); // 5
counter.decrement(); // 4

我们基本上正在处理以前挑战的荣耀版本。我们要做的就是以相同的方式编写它,但是随着resetdecrement函数的添加。两者都易于实现,但我们将从我们拥有的东西开始。

让我们编写一个具有基本功能的函数,返回对象中包含的increment函数。

function createCounter(init) {
  let i = 0;
  return {
    increment: () => init + ++i
  }
}

我们声明一个私有变量i,并返回带有increment函数的对象,该函数将i增加1并返回新值。

但是,在最后一个挑战中,您使用了i++,而不是++i。有什么交易?

这是因为在最后一个问题中,我们需要计数器才能在第一次被调用时返回init。对于此功能,我们需要它始终为 embly 返回init加上i的增量值。由于++i返回新值,就像第一次添加1时,第二次,第二次等等。

减少逻辑将使用几乎相同的结构。

function createCounter(init) {
  let i = 0;
  return {
    increment: () => init + ++i,
    decrement: () => init + --i
  }
}

如果您了解--i++i相同,这应该是有道理的,它只是以相反的方式起作用。

现在我们编写了reset函数,我们告诉我们设置将返回回到init的值。我们是如何第一次完成的?通过将i设置为0。

function createCounter(init) {
  let i = 0;
  return {
    increment: () => init + ++i,
    decrement: () => init + --i,
    reset: () => {
      i = 0;
      return init;
    }
  }
}

这就是解决方案。

结论。

增加操作员可能会令人困惑。一旦学习了作弊表的工作方式,解决问题的解决方案就开始变得有意义。

i++-增量i然后返回i - 1
++i-增量i然后返回i
i---降低i然后返回i + 1
--i-降低i然后返回i

如果您发现这个有用,请务必在帖子上留下ð,而在Github repo上留下ð!

关注更多LC内容:)