Algorithm
30 Days of JavaScript
Counter Ii

2665. Counter II

Tags

  • Closures

Link

https://leetcode.com/problems/counter-ii/description/?envType=study-plan-v2&envId=30-days-of-javascript (opens in a new tab)

Question

Write a function createCounter. It should accept an initial integer init. It should return an object with three functions. The three functions are:

  • increment() increases the current value by 1 and then returns it.
  • decrement() reduces the current value by 1 and then returns it.
  • reset() sets the current value to init and then returns it.
Example 1:
Input: init = 5, calls = ["increment","reset","decrement"]
Output: [6,5,4]
Explanation:
const counter = createCounter(5);
counter.increment(); // 6
counter.reset(); // 5
counter.decrement(); // 4
Example 2:
Input: init = 0, calls = ["increment","increment","decrement","reset","reset"]
Output: [1,2,1,0,0]
Explanation:
const counter = createCounter(0);
counter.increment(); // 1
counter.increment(); // 2
counter.decrement(); // 1
counter.reset(); // 0
counter.reset(); // 0
Constraints:
  • -1000 <= init <= 1000
  • 0 <= calls.length <= 1000
  • calls[i] is one of "increment", "decrement" and "reset"

Answer

JavaScript

/**
 * @param {integer} init
 * @return { increment: Function, decrement: Function, reset: Function }
 */
var createCounter = function (init) {
  let sum = init;
  return {
    increment() {
      return ++sum;
    },
    decrement() {
      return --sum;
    },
    reset() {
      return (sum = init);
    },
  };
};
 
/**
 * const counter = createCounter(5)
 * counter.increment(); // 6
 * counter.reset(); // 5
 * counter.decrement(); // 4
 */