2803. 阶乘生成器 🔒
题目描述
编写一个生成器函数,该函数以一个整数 n 作为参数,并返回一个生成器对象,该生成器对象可以生成 阶乘序列 。
阶乘序列 的定义如下:n! = n * (n-1) * (n-2) * ... * 2 * 1 。
0 的阶乘被定义为 1。
示例 1:
输入:n = 5 输出:[1,2,6,24,120] 解释: const gen = factorial(5) gen.next().value // 1 gen.next().value // 2 gen.next().value // 6 gen.next().value // 24 gen.next().value // 120
示例 2:
输入:n = 2 输出:[1,2] 解释: const gen = factorial(2) gen.next().value // 1 gen.next().value // 2
示例 3:
输入:n = 0 输出:[1] 解释: const gen = factorial(0) gen.next().value // 1
提示:
0 <= n <= 18
解法
方法一
思考
题目要求按需依次给出 \(0!\) 或 \(1!\) 至 \(n!\),预先算完全部阶乘并无必要。生成器保存累积乘积,每次乘上下一个因子后产出;若 \(n=0\),则单独产出 \(0!=1\)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |