LeetCode JavaScript 30 Days Challenge – Day3 – 2665. Counter II

    LeetCode JavaScript 30 Days ChallengeLeetCode Js-Number

    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.

    寫一個叫做 createCounter 函式,當它接受一個初始整數 init 作為參數時
    ,該函式應該回傳一個包含三個函式的物件。
    
    這三個函式如下:
    increment() :將當前值增加 1,並回傳它。
    decrement() :將當前值減 1,並回傳它。
    reset() :將當前值設置為 init,並回傳它。
    

    Example 1:

    Input: init = 5, calls = ["increment","reset","decrement"]
    Output: [6,5,4]
    

    Example 2:

    Input: init = 0, calls = ["increment","increment","decrement","reset","reset"]
    Output: [1,2,1,0,0]
    

    solution:
    宣告一個變數 value,並用來儲存初始的值,接著:

    – 定義 increment 箭頭函式: () => ++value ,因表示該函式沒有參數,只需執行 ++value 運算。
    – 定義 reset 箭頭函式: () => value = init ,因表示該函式沒有參數,只需回傳 value 的初始 init 值。
    – 定義 decrement 箭頭函式: () => –value 因表示該函式沒有參數,只需執行 –value 運算。

    最後將 increment、reset 和 decrement 這三個函式封裝在一個物件中,並將該物件作為 createCounter 函式的回傳值。

    Code 1: BigO(1)

    var createCounter = function(init) {
        let value = init
    
        const increment = () => ++value
        const reset = () => value = init
        const decrement = () => --value
    
        return { increment, reset, decrement };
    };
    

    FlowChart:
    Example 1

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

    Example 2

    const counter = createCounter(0)
    counter.increment(); // 1
    counter.increment(); // 2
    counter.decrement(); // 1
    counter.reset(); // 0
    counter.reset(); // 0