我想记住需要两个 int 的函数的返回结果。我知道我可以将向量转换为字符串,如
1-2
但还有其他方法吗?
我尝试将数组设置为地图,但数组之间没有比较
let map = new Map();
function gridTraveler(m, n){
if (m === 0 || n === 0)
return 0;
if (m === 1 && n === 1)
return 1;
if (map.has([m,n]))
return map.get([m, n]);
let res = gridTraveler(m-1, n) + gridTraveler(m, n-1);
map.set([m, n], res);
return res;
}
要记住函数
gridTraveler
而不将键转换为字符串,您可以将参数序列化为唯一的对象键。
在 JavaScript 中,在映射中用作键的对象或数组是通过其引用进行比较,而不是通过其内容MDN 文档。因此,您需要一种方法来为每对参数生成一致、唯一的对象引用。
这是一种仅保留整数的方法:
使用嵌套映射:外部映射键为
m
,每个 m
映射到另一个映射,其中键为 n
。
检查并设置此两级映射结构中的值。
以下是实施方法:
let map = new Map();
function gridTraveler(m, n) {
if (m === 0 || n === 0) return 0;
if (m === 1 && n === 1) return 1;
if (!map.has(m)) map.set(m, new Map());
const mMap = map.get(m);
if (mMap.has(n)) return mMap.get(n);
let res = gridTraveler(m - 1, n) + gridTraveler(m, n - 1);
mMap.set(n, res);
return res;
}
在此版本中,
map
是一个映射,其中每个键都是一个m
值,每个值是另一个映射(我们称之为mMap
)。 mMap
具有 n
键并存储结果。这避免了字符串转换的需要并保留了记忆的好处。
如果要使用数组值作为键,则必须保留引用。
const map = new Map();
const key1 = [1,2];
map.set(key1, 3);
地图(1) {数组(2) => 3}
map.get(key1); // works
3
map.get([1,2]); // not work
未定义