题目:
请你编写一个函数,它接收另一个函数作为输入,并返回该函数的 记忆化 后的结果。记忆函数是一个对于相同的输入永远不会被调用两次的函数。相反,它将返回一个缓存值。你可以假设有 3 个可能的输入函数:sum 、fib 和 factorial 。
- sum 接收两个整型参数 a 和 b ,并返回 a + b 。
- fib 接收一个整型参数 n ,如果 n <= 1 则返回 1,否则返回 fib (n - 1) + fib (n - 2)。
- factorial 接收一个整型参数 n ,如果 n <= 1 则返回 1 ,否则返回 factorial(n - 1) * n 。
示例1:
示例2:
示例3:
解题思路:闭包。需要注意参数“...args”中表示参数fn这个函数包含的所有参数,通过构建一个Map来缓存相同输入的返回值。
Javascript代码
/**
* @param {Function} fn
*/
function memoize(fn) {
let map = new Map()
return function (...args) {
let key = JSON.stringify(args)
if (!map.has(key)) {
map.set(key, fn(...args))
}
return map.get(key)
}
}
/**
* let callCount = 0;
* const memoizedFn = memoize(function (a, b) {
* callCount += 1;
* return a + b;
* })
* memoizedFn(2, 3) // 5
* memoizedFn(2, 3) // 5
* console.log(callCount) // 1
*/
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/memoize
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。