2803. 阶乘生成器 🔒
2803. 阶乘生成器 🔒
题目
Write a generator function that takes an integer n
as an argument and returns a generator object which yields the factorial sequence.
The factorial sequence is defined by the relation n! = n * (n-1) * (n-2) * ... * 2 * 1.
The factorial of 0 is defined as 1.
Example 1:
Input: n = 5
Output: [1,2,6,24,120]
Explanation:
const gen = factorial(5); gen.next().value; // 1 gen.next().value; // 2 gen.next().value; // 6 gen.next().value; // 24 gen.next().value; // 120
Example 2:
Input: n = 2
Output: [1,2]
Explanation:
const gen = factorial(2); gen.next().value; // 1 gen.next().value; // 2
Example 3:
Input: n = 0
Output: [1]
Explanation:
const gen = factorial(0); gen.next().value; // 1
Constraints:
0 <= n <= 18
题目大意
编写一个生成器函数,该函数以一个整数 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
解题思路
可以创建一个生成器函数 factorialGenerator
,它接收一个整数 n
作为参数,并生成从 0!
到 n!
的阶乘序列。
- 初始化一个变量
res
为1
(即0!
的值)。 - 当
n = 0
时,直接yield res
。 - 使用
for
循环从1
到n
,每次生成器调用next()
时,都根据阶乘定义计算并更新阶乘值res *= i
,并返回当前的阶乘值。
代码
var factorial = function* (n) {
let res = 1;
if (n == 0) {
yield res;
}
for (let i = 1; i <= n; i++) {
res *= i;
yield res;
}
};