這個系列是之前就有計畫要執行的,剛好在LeetCode上有看到幫我們整理好30題JS相關的題目,就決定來一個類鐵人賽的方式,把這30題做完。
因為之前沒有寫過類似文章,因此格式什麼的我都是自己亂打的,如果發現格式有改變可能是我發現更棒的格式了!
Day 2:Counter
問題描述:
Given an integer n
, return a counter
function. This counter
function initially returns n
and then returns 1 more than the previous value every subsequent time it is called (n
, n + 1
, n + 2
, etc).
問題難度:Easy
問題限制:
1000 <= n <= 1000
0 <= calls.length <= 1000
calls[i] === "call"
我的解題思路
分析:
第一個反應是用閉包的概念,先設定一個外部函數,它將初始計數作為參數,並傳回一個內部函數,該函數在每次呼叫時遞增並傳回計數。
但結果出來卻是都比原本的結果多一,才發現我是已經先加1後才回傳,因此這邊做了修改:
1 | var createCounter = function(n) { |
這樣就正常了,但是先-1在加1真的覺得像白癡一樣,因此改成
1 | var createCounter = function(n) { |
其他解法
1 | // Using arrow function |
結語
這題使用到了閉包的概念,在一開始還知道解題的方向但十座上遇到了一點小問題,但還好都不難一下子就解決了。
閉包相關的資料可以看這篇:
https://jeff0518.github.io/2023/09/20/2023%E9%90%B5%E4%BA%BA%E8%B3%BD-2023-09-20-Day20/