跳至主要內容

2620. 计数器


2620. 计数器open in new window

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

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).

Example 1:

Input:

n = 10

["call","call","call"]

Output: [10,11,12]

Explanation: counter() = 10 // The first time counter() is called, it returns n.

counter() = 11 // Returns 1 more than the previous time.

counter() = 12 // Returns 1 more than the previous time.

Example 2:

Input:

n = -2

["call","call","call","call","call"]

Output: [-2,-1,0,1,2]

Explanation: counter() initially returns -2. Then increases after each sebsequent call.

Constraints:

  • -1000 <= n <= 1000
  • 0 <= calls.length <= 1000
  • calls[i] === "call"

题目大意

给定一个整型参数 n,请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值 ( n , n + 1 , n + 2 ,等等)。

示例 1:

输入:

n = 10

["call","call","call"]

输出:[10,11,12]

解释:

counter() = 10 // 第一次调用 counter(),返回 n。

counter() = 11 // 返回上次调用的值加 1。

counter() = 12 // 返回上次调用的值加 1。

示例 2:

输入:

n = -2

["call","call","call","call","call"]

输出:[-2,-1,0,1,2]

解释: counter() 最初返回 -2。然后在每个后续调用后增加 1。

提示:

  • -1000 <= n <= 1000
  • 0 <= calls.length <= 1000
  • calls[i] === "call"

解题思路

这是闭包的一个典型应用。我们需要用闭包来保存 n 的当前值,每次调用递增后返回最新值。

  1. 创建一个函数 createCounter,这个函数接受一个参数 n,即从哪个数字开始计数。
  2. 返回一个函数,该函数每次调用时递增并返回当前计数值。

这道题旨在帮助理解闭包的基本概念,在闭包中,内部函数可以访问外部函数的变量并保存其状态。

复杂度分析

  • 时间复杂度O(1),每次调用时仅进行一次数值操作。
  • 空间复杂度O(1),只需要存储变量 n

代码

/**
 * @param {number} n
 * @return {Function} counter
 */
var createCounter = function (n) {
	return function () {
		return n++;
	};
};

/**
 * const counter = createCounter(10)
 * counter() // 10
 * counter() // 11
 * counter() // 12
 */

相关题目

题号标题题解标签难度
2623记忆函数open in new window[✓]
2629复合函数open in new window[✓]
2665计数器 IIopen in new window[✓]