# [2665. 计数器 II](https://leetcode.cn/problems/counter-ii) [English Version](/solution/2600-2699/2665.Counter%20II/README_EN.md) ## 题目描述 <!-- 这里写题目描述 --> <p>请你写一个函数 <code>createCounter</code>。这个函数接收一个初始的整数值 <code>init</code>。并返回一个包含三个函数的对象。</p> <p>这三个函数是:</p> <ul> <li><code>increment()</code> 将当前值加 1 并返回。</li> <li><code>decrement()</code> 将当前值减 1 并返回。</li> <li><code>reset()</code> 将当前值设置为 <code>init</code> 并返回。</li> </ul> <p> </p> <p><strong class="example">示例 1:</strong></p> <pre> <strong>输入:</strong>init = 5, calls = ["increment","reset","decrement"] <strong>输出:</strong>[6,5,4] <strong>解释:</strong> const counter = createCounter(5); counter.increment(); // 6 counter.reset(); // 5 counter.decrement(); // 4 </pre> <p><strong class="example">示例 2:</strong></p> <pre> <strong>输入:</strong>init = 0, calls = ["increment","increment","decrement","reset","reset"] <strong>输出:</strong>[1,2,1,0,0] <strong>解释:</strong> const counter = createCounter(0); counter.increment(); // 1 counter.increment(); // 2 counter.decrement(); // 1 counter.reset(); // 0 counter.reset(); // 0 </pre> <p> </p> <p><strong>提示:</strong></p> <ul> <li><code>-1000 <= init <= 1000</code></li> <li><code>0 <= calls.length <= 1000</code></li> <li><code>calls[i]</code> 是 “increment”、“decrement” 和 “reset” 中的一个</li> </ul> ## 解法 <!-- 这里可写通用的实现逻辑 --> <!-- tabs:start --> ### **TypeScript** ```ts type ReturnObj = { increment: () => number; decrement: () => number; reset: () => number; }; function createCounter(init: number): ReturnObj { let val = init; return { increment() { return ++val; }, decrement() { return --val; }, reset() { return (val = init); }, }; } /** * const counter = createCounter(5) * counter.increment(); // 6 * counter.reset(); // 5 * counter.decrement(); // 4 */ ``` ### **...** ``` ``` <!-- tabs:end -->